性能问答>为什么运行单线程 Java 程序会导致许多内核处于活动状态?>
2回复

为什么运行单线程 Java 程序会导致许多内核处于活动状态?



我在对从 Object 转换为数据类型的总延迟进行基准测试。 但是我碰到了一个Java 集合非常奇怪的行为,在本例中为List。

List<Long> data = new ArrayList<>();
int SIZE = 50_000_000;

long currentTime = System.currentTimeMillis();
for (int i = 0; i < SIZE; i++) {
    data.add(currentTime++);
}

我在我的 Intel i5 8250u (4 核)上运行上述代码的时候,CPU 利用率在 IntelliJ Idea 上为 100%。我觉得可能是因为 IntelliJ,所以我就把代码移到有 20 个内核的 Azure VM(运行 CentOS 7.4),结果这段代码最后消耗了1500% CPU(使用top命令的结果),也就是 15 个内核。

我不能理解的是:单线程 Java 程序代码如何消耗 1 个以上的内核?

重现步骤

运行上面的代码。

机器配置

笔记本电脑:4 核 16Gb RAM,Oracle Java 1.8_161

Azure VM:20 核 148GB RAM,Oracle Java 1.8_161

笔记本电脑上 JVisualVM 的输出
WUdax.png

A01la.png

1459 阅读
请先登录,查看2条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步