Sun Studio 12:性能分析器

Java 处理表示法

对于用 Java 编程语言编写的应用程序,有以下三种显示性能数据的表示法:Java 表示法、专家 Java 表示法和机器表示法。缺省情况下,将显示 Java 表示法(前提是数据支持它)。下一节汇总了这三种表示法的主要差异。

用户表示法

用户表示法按名称显示已编译的和已解释的 Java 方法,并以其自然形式显示本机方法。在执行过程中,可能存在已执行的特定 Java 方法的许多实例:已解释的版本,也许还有一个或多个已编译的版本。在 Java 表示法中,所有方法会被聚集显示为一个方法。缺省情况下,在分析器中选定此表示法。

Java 表示法中 Java 方法的 PC 与该方法中的方法 id 和字节码索引相对应;本机函数的 PC 与机器 PC 相对应。Java 线程的调用栈可能同时具有 Java PC 和机器 PC。它没有对应于 Java 内务处理代码(无 Java 表示法)的任何帧。在某些情况下,JVM 软件无法展开 Java 堆栈,将返回单个帧及特殊函数 <no Java callstack recorded>。通常,它占总时间的比例不会超过 5-10%。

Java 表示法中的函数列表针对所调用的 Java 方法和任何本机方法显示度量。调用者-被调用者面板显示 Java 表示法中的调用关系。

Java 方法的源代码对应于 .java 文件(从中编译源代码,每个源代码行上都有度量)中的源代码。任何 Java 方法的反汇编显示为它生成的字节码,以及针对每个字节码的度量和交错的 Java 源代码(如果可用)。

Java 表示法中的时间线仅显示 Java 线程。每个线程的调用栈与其 Java 方法一起显示。

所有 Java 程序都可能具有显式同步,通常是通过调用 monitor-enter 例程执行的。

Java 表示法中的同步延迟跟踪基于 JVMTI 同步事件。Java 表示法中不显示来自常规同步跟踪的数据。

当前不支持 Java 表示法中的数据空间分析。

专家用户表示法

专家 Java 表示法与 Java 表示法类似,不同之处是在专家 Java 表示法中公开了在 Java 表示法中抑制的一些 JVM 内部详细信息。对于专家 Java 表示法,时间线显示所有线程;内务处理线程的调用栈是本机调用栈。

机器表示法

机器表示法显示来自 JVM 软件本身而不是来自 JVM 软件解释的应用程序的函数。该表示法还显示所有已编译方法和本机方法。机器表示法看起来与用传统语言编写的应用程序的表示法相同。调用栈显示 JVM 帧、本地帧和编译方法帧。一些 JVM 帧表示已解释的 Java、已编译的 Java 和本机代码之间的转换代码。

针对 Java 源代码显示已编译方法的源代码;数据表示所选已编译方法的特定实例。已编译方法的反汇编显示生成的机器汇编程序代码,而不是 Java 字节码。调用者-被调用者关系显示所有开销帧,以及表示已解释方法、已编译方法和本机方法之间的转换的所有帧。

机器表示法中的时间线以条形图显示所有线程、LWP 或 CPU,而其中每项的调用栈都是机器表示法调用栈。

在机器表示法中,线程同步被移交给对 _lwp_mutex_lock 的调用。不显示同步数据,因为未跟踪这些调用。