Java代码段的getCurrentThreadCpuTime diff和System.nanoTime()diff的大小存在巨大差异

Java代码段的getCurrentThreadCpuTime diff和System.nanoTime()diff的大小存在巨大差异,java,performance,time,garbage-collection,preemption,Java,Performance,Time,Garbage Collection,Preemption,JVM是在启用详细GC日志开关的情况下启动的,在上述代码运行时没有GC日志。那么,我们能否得出结论,如果实际延迟和CPU时间之间存在巨大差异,那么线程就被操作系统抢占了 我观察到了巨大的差异:延迟超过1秒,timeElpasedCPU只有几毫秒。如果您完全按照显示的方式运行代码(即,在您指示的地方没有任何内容)//一些Java代码(没有网络/数据库调用),会发生什么?在询问之前,请尝试一些不同的测试,您可以自己解决。另外,isThreadCpuTimeSupported()和isThreadCp

JVM是在启用详细GC日志开关的情况下启动的,在上述代码运行时没有GC日志。那么,我们能否得出结论,如果实际延迟和CPU时间之间存在巨大差异,那么线程就被操作系统抢占了


我观察到了巨大的差异:延迟超过1秒,timeElpasedCPU只有几毫秒。

如果您完全按照显示的方式运行代码(即,在您指示的地方没有任何内容)//一些Java代码(没有网络/数据库调用),会发生什么?在询问之前,请尝试一些不同的测试,您可以自己解决。另外,
isThreadCpuTimeSupported()
isThreadCpuTimeEnabled()
?@JimGarrison我看到isThreadCpuTimeSupported()和isThreadCpuTimeEnabled()的结果是什么是真的。如果我完全按照显示的方式运行代码,那么这两种延迟之间就不会有太大的差异。如果完全按照显示的方式运行代码(即,没有任何指示
//某些Java代码(没有网络/数据库调用),会发生什么情况
?在询问之前,请尝试一些不同的测试,您可以自己解决。另外,
isThreadCpuTimeSupported()
isThreadCpuTimeEnabled()
?@JimGarrison我看到isThreadCpuTimeSupported()和isThreadCpuTimeEnabled()的结果是什么如果我运行的代码完全如图所示,那么这两种延迟之间永远不会有巨大的差异。
ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
long startCPUTime = threadBean.getCurrentThreadCpuTime();
long startTime = System.nanoTime();

// Some Java Code (No Network/Database calls) .....

long endCPUTime = threadBean.getCurrentThreadCpuTime();
long endTime = System.nanoTime();

long timeElapsedCPU = endCPUTime - startCPUTime
long latency = endTime - startTime