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

问题描述

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

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

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

Profiler snapshot

解决方法

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

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

所以我认为我们可以排除这一点作为可能的解释。