Oracle® Solaris Studio 12.4:性能分析器教程

退出打印视图

更新时间: 2014 年 12 月
 
 

检查混合 Java 和 C++ 代码

本节讲述 "Call Tree"(调用树)视图和 "Source"(源)视图,并介绍如何查看 Java 与 C++ 的调用相互之间的关系。本节还介绍如何向导航面板添加 "Disassembly"(反汇编)视图。

  1. 依次选择 "Function"(函数)视图中列表顶部的每个函数,然后在 "Selection Details"(选择详细信息)窗口中检查详细信息。

    请注意,对于一些函数,"Source File"(源文件)被报告为 jsynprog.java,而对于一些其他函数则报告为 cloop.cc。这是因为 jsynprog 程序装入了名为 libcloop.so 的 C++ 共享对象,其是从 cloop.cc C++ 源文件构建的。性能分析器无缝报告从 Java 到 C++ 的调用,反之亦然。

  2. 选择导航面板中的 "Call Tree"(调用树)。

    "Call Tree"(调用树)视图以图形方式显示如何在 Java 和 C++ 之间进行这些调用。

    image:jsynprog 样例代码的 “Call Tree“(调用树)视图
  3. 在 "Call Tree"(调用树)视图中,执行以下操作来查看从 Java 到 C++ 以及再回到 Java 的调用:

    • 展开引用名称中包含 "C" 的各种函数的行。

    • 选择 jsynprog.JavaCC() 对应的行。该函数来自 Java 代码,但是它调用到来自 C++ 代码的 Java_jsynprog_JavaCC() 中。

    • 选择 jsynprog.JavaCJava() 对应的行。该函数也来自 Java 代码,但是调用属于 C++ 代码的 Java_jsynprog_JavaCJava()。该函数调用到 JNIEnv_::CallStaticIntMethod() 的 C++ 方法中,JNIEnv_::CallStaticIntMethod 回调到 Java 来调用方法 jsynprog.javafunc()

  4. 选择 Java 或 C++ 的方法并切换到 "Source"(源)视图,来查看以适当语言显示的源代码以及性能度量。

    选择 Java 方法后的 "Source"(源)视图的示例如下所示。

    image:“Source“(源)视图显示 Routine.java 的源代码

    选择 C++ 方法后的 "Source"(源)视图的示例如下所示。

    image:“Source“(源)视图显示 cloop.cc 的 C++ 源代码
  5. 在导航面板的顶部,单击 "Views"(视图)标签旁边的 + 按钮并选中 "Disassembly"(反汇编)的复选框。

    此时将显示最后选择的函数的 "Disassembly"(反汇编)视图。对于 Java 函数,"Disassembly"(反汇编)视图显示 Java 字节代码,如下面的屏幕抓图中所示。

    image:Java 函数的 “Disassembly“(反汇编)视图

    对于 C++ 函数,"Disassembly"(反汇编)视图显示本机计算机代码,如下面的屏幕抓图中所示。

    image:C++ 函数的 “Disassembly“(反汇编)视图

    下一节进一步使用 "Disassembly"(反汇编)视图。