Yourkit 如何衡量花在 unsafe.park 本机方法上的时间?

How does Yourkit measures time spent on unsafe.park native method?

我知道 Yourkit 会测量像 Thread.sleep() 这样的方法的挂起时间,但是 unsafe.park 本机方法呢?波纹管是采样设置:

walltime=java.io.RandomAccessFile : readBytes(byte[], int, int) walltime=java.io.RandomAccessFile : read() walltime=java.io.RandomAccessFile : write(int) walltime=java.io.RandomAccessFile : writeBytes(byte[], int, int) walltime=java.net.SocketInputStream : socketRead0(java.io.FileDescriptor, byte[], int, int, int) walltime=java.net.SocketOutputStream : socketWrite0(java.io.FileDescriptor, byte[], int, int) walltime=java.lang.Thread : sleep(*)

sampling_period_ms=20

看来unsafe.park()没有使用walltime,所以肯定是CPU时间。根据 Yourkit 文档,CPU 时间是 CPU 花在这个方法上的实际时间,而不仅仅是方法进入和退出之间的时间。

Yourkit 显示在 park() 方法上花费了大量时间,但我不认为 CPU 在 park() 方法上花费了大量时间。 你能证实一下吗?谢谢

默认情况下,YourKit 分析器不显示 Unsafe.park()。 Profiler 代理测量时间,但 UI 不显示它。要更改此设置,请在 yjp.ini 中指定 -Dyjp.zero.time.methods=false 并重新启动探查器 UI.