本节讲述 "Call Tree"(调用树)视图和 "Source"(源)视图,并介绍如何查看 Java 与 C++ 的调用相互之间的关系。本节还介绍如何向导航面板添加 "Disassembly"(反汇编)视图。
依次选择 "Function"(函数)视图中列表顶部的每个函数,然后在 "Selection Details"(选择详细信息)窗口中检查详细信息。
请注意,对于一些函数,"Source File"(源文件)被报告为 jsynprog.java,而对于一些其他函数则报告为 cloop.cc。这是因为 jsynprog 程序装入了名为 libcloop.so 的 C++ 共享对象,其是从 cloop.cc C++ 源文件构建的。性能分析器无缝报告从 Java 到 C++ 的调用,反之亦然。
选择导航面板中的 "Call Tree"(调用树)。
"Call Tree"(调用树)视图以图形方式显示如何在 Java 和 C++ 之间进行这些调用。
在 "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()。
选择 Java 或 C++ 的方法并切换到 "Source"(源)视图,来查看以适当语言显示的源代码以及性能度量。
选择 Java 方法后的 "Source"(源)视图的示例如下所示。
选择 C++ 方法后的 "Source"(源)视图的示例如下所示。
如果尚未在导航面板中看到 "Disassembly"(反汇编)标签,要添加该视图,请单击导航面板顶部 "Views"(视图)标签旁边的 + 按钮,然后选中 "Disassembly"(反汇编)复选框。
此时将显示最后选择的函数的 "Disassembly"(反汇编)视图。对于 Java 函数,"Disassembly"(反汇编)视图显示 Java 字节代码,如下面的屏幕抓图中所示。
对于 C++ 函数,"Disassembly"(反汇编)视图显示本机计算机代码,如下面的屏幕抓图中所示。
下一节进一步使用 "Disassembly"(反汇编)视图。