如何查看JMH中的调用树分析?

Але*_*ков 2 java profiler profiling microbenchmark jmh

我想分析JMH测试并查看像VisualVM中一样的调用树。但是,当我使用StackProfiler时,它为我提供了诸如此类的本机方法,这对我而言完全没有用。

....[Thread state distributions]....................................................................
 59,9%         TIMED_WAITING
 23,0%         WAITING
 17,0%         RUNNABLE

....[Thread state: TIMED_WAITING]...................................................................
 47,3%  78,9% sun.misc.Unsafe.park
  8,3%  13,8% java.lang.Thread.sleep
  4,4%   7,3% java.lang.Object.wait

....[Thread state: WAITING].........................................................................
 21,9%  95,1% sun.misc.Unsafe.park
  1,1%   4,9% java.lang.Object.wait

....[Thread state: RUNNABLE]........................................................................
 13,5%  79,0% sun.nio.ch.EPollArrayWrapper.epollWait
  2,0%  11,5% java.net.SocketInputStream.socketRead0
  1,0%   5,7% java.net.PlainSocketImpl.socketAccept
Run Code Online (Sandbox Code Playgroud)

Ale*_*lev 5

JMH的堆栈分析器是一个非常简单的实现。如果还需要更多功能,为什么不使用成熟的探查器(例如您提到的VisualVM)呢?或者,请参阅-prof stack:help

$ java -jar jmh-samples/target/benchmarks.jar -prof stack:help
Usage: -prof <profiler-name>:opt1=value1,value2;opt2=value3

Options accepted by org.openjdk.jmh.profile.StackProfiler:

  lines=<int>     Number of stack lines to save in each stack trace.
                  Larger values provide more insight into who is calling
                  the top stack method, as the expense of more stack
                  trace shapes to collect. (default: [1])
Run Code Online (Sandbox Code Playgroud)