5

我知道 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(*)

采样周期毫秒=20

似乎 unsafe.park() 没有使用 walltime,所以它必须是 CPU 时间。根据 Yourkit 文档,CPU 时间是 CPU 在此方法上花费的实际时间,而不仅仅是方法进入和退出之间的时间。

Yourkit 显示了在 park() 方法上花费了很多时间,但我认为 CPU 在 park() 方法上花费的时间并不多。你能确认一下吗?谢谢。

4

1 回答 1

4

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

于 2015-04-15T12:25:33.663 回答