Java -Xprof输出的说明

时间:2015-08-18 22:22:01

标签: java profiler

我试图解释通过指定-Xprof标志产生的分析输出。

对于我的应用程序,我得到这样的分析输出:

 Flat profile of 8.34 secs (775 total ticks): main
  Interpreted + native   Method
 10.4%    66  +    12    java.lang.ClassLoader.defineClass1
  3.6%    27  +     0    java.nio.HeapCharBuffer.<init>
  2.5%     1  +    18    java.io.UnixFileSystem.getBooleanAttributes0
...
 74.4%   380  +   179    Total interpreted (including elided)
     Compiled + native   Method
  0.3%     0  +     2    java.util.jar.JarFile$1.hasMoreElements
  0.3%     0  +     2    org.reflections.vfs.ZipDir$1$1.computeNext
  0.1%     0  +     1    java.lang.Object.<init>
...
  1.7%     3  +    10    Total compiled
         Stub + native   Method
  7.5%     0  +    56    java.util.zip.ZipFile.getEntry
  4.7%     0  +    35    java.lang.Object.getClass
  3.2%     0  +    24    java.lang.System.arraycopy
...
 23.2%     0  +   174    Total stub
  Thread-local ticks:
  3.1%    24             Blocked (of total)
  0.7%     5             Class loader

对于每个帖子。我的问题是InterpretedCompiledStub方法之间的区别是什么,Thread-local ticks是什么,+ native列的含义是什么?是否有-Xprof分析器的规范文档?谷歌搜索Xprof收效甚微。

1 个答案:

答案 0 :(得分:11)

我曾经找到过像XProf这样的工具信息的唯一地方是一些(稍微陈旧的)基于纸质的Java书籍。

  • 解释+本机:此图显示了JVM在执行解释方法时使用的滴答。额外(+ native)列显示了这些解释方法调用的本机C方法。
  • 已编译+原生:此图显示已由JIT compiler解析的方法使用的刻度。运行程序一段时间后,解释部分的大多数主要消费者都应该显示为“已编译”,因为JIT会编译它们。
  • Stubs + native :此图适用于JNI调用。这可能只会使用“本机”列,因为JNI当然是作为一系列本机调用执行的。
  • 线程本地滴答:这被列为“杂项”其他条目,并写在“不应从性能优化角度提出问题”的某处。我不确定我们有多信任这一点,但XProf实际上并不像上面所说的那样是一个记录工具。