Oracle® Developer Studio 12.5:性能分析器教程

退出打印视图

更新时间: 2016 年 6 月
 
 

关于 Java-C++ 分析教程

本教程说明 Oracle Developer Studio 性能分析器的 Java 分析功能。它介绍了如何使用样例代码在性能分析器中执行以下操作:

  • 检查各种数据视图中的性能数据,包括 "Overview"(概述)页面以及 "Threads"(线程)、"Functions"(函数)和 "Timeline"(时间线)视图。

  • 查看 Java 代码和 C++ 代码的 "Source"(源)和 "Disassembly"(反汇编)。

  • 了解 "User Mode"(用户模式)、"Expert Mode"(专家模式)和 "Machine Mode"(计算机模式)之间的差异。

  • 深入了解执行程序的 JVM 的行为并查看任何 HotSpot 编译的方法的已生成本机代码。

  • 了解如何通过用户代码调用垃圾收集器以及如何触发 HotSpot 编译器。

jsynprog 是 Java 程序,具有 Java 程序的许多典型子任务。该程序还装入 C++ 共享对象并从该对象调用各种例程,以显示从 Java 代码到动态装入的 C++ 库中的本机代码的无缝转换以及反向转换。

jsynprog.main 是主方法,调用不同类中的函数。它通过 Java 本地接口 (Java Native Interface, JNI) 调用来使用 gethrtimegethrvtime 以对其自己的行为计时,并写入具有其自己的计时的记帐文件以及将消息写入 stdout

jsynprog.main 具有许多方法:

  • Routine.memalloc 执行内存分配并触发垃圾收集

  • Routine.add_int 执行整型加法

  • Routine.add_double 执行双精度(浮点)加法

  • Sub_Routine.add_int 是派生调用,覆盖 Routine.add_int

  • Routine.has_inner_class 定义内部类并使用该类

  • Routine.recurse 显示直接递归

  • Routine.recursedeep 执行深度递归,显示工具如何处理截断的堆栈

  • Routine.bounce 显示间接递归,其中 bounce 调用 bounce_b,后者又会再回调 bounce

  • Routine.array_op 执行数组运算

  • Routine.vector_op 执行向量运算

  • Routine.sys_op 使用系统类中的方法

  • jsynprog.jni_JavaJavaC:Java 方法调用其他 Java 方法,而后者调用 C 函数

  • jsynprog.JavaCJava:Java 方法调用 C 函数,而该函数又会调用某个 Java 方法

  • jsynprog.JavaCC:Java 调用 C 函数,而该函数会调用另一个 C 函数

这些方法中的一些方法从另一些方法进行调用,所以它们并不是全部表示顶级任务。

在记录的实验中看到的数据将与此处显示的数据不同。用于教程中屏幕抓图的实验是在运行 Oracle Solaris 11.3 的 SPARC T5 系统上记录的。来自运行 Oracle Solaris 或 Linux 的 x86 系统的数据将会有所不同。此外,数据收集本质上是统计性的,随实验的不同而不同,即使运行在同一系统和 OS 上也是如此。

您看到的性能分析器窗口配置可能不会与屏幕抓图完全匹配。通过性能分析器,可以拖动窗口各部分之间的分隔条,折叠各部分以及调整窗口大小。性能分析器记录其配置,并在下次运行时使用相同的配置。在捕获教程所示的屏幕抓图的过程中进行了许多配置更改。