为啥在 VisualVM 中 CPU 时间大于挂钟时间?

Posted

技术标签:

【中文标题】为啥在 VisualVM 中 CPU 时间大于挂钟时间?【英文标题】:Why is CPU time greater than wall clock time in VisualVM?为什么在 VisualVM 中 CPU 时间大于挂钟时间? 【发布时间】:2021-03-24 22:21:25 【问题描述】:

使用 VisualVM 进行分析时,CPU 时间低于挂钟时间可能是由于缓存未命中(=等待内存访问)、线程阻塞,甚至是操作系统认为其他更重要的事情。

但是,如果 CPU 时间实际上高于挂钟时间,我应该如何解释相反的情况?我的第一个猜测是并行化,但我的代码是单线程的。 JIT 是否并行化?我使用 OpenJDK 11。

我的代码中有几个这样的例子,下面只是一个:

【问题讨论】:

【参考方案1】:

我不知道这个异常的真正原因是什么。然而:

    当前一代 HotSpot JIT 在编译代码时不会自动并行化代码。 (AFAIK) LinkedList.removeFirst() 操作无论如何都不会自动并行化。

所以我认为我们可以排除它作为可能的解释。

【讨论】:

以上是关于为啥在 VisualVM 中 CPU 时间大于挂钟时间?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux/Windows 上测量 CPU 时间和挂钟时间?

为啥 CORBA run() 依赖于挂钟?

了解 visualvm 分析器中的 CPU 时间

为啥不是所有方法都显示在 VisualVM 分析器中?

为啥 visualvm 中的“总时间”列与运行时持续时间不同?

VisualVM:CPU/内存分析器卡在“连接到目标 JVM...”