为什么Java使用的内核比我要求的多?

时间:2014-08-01 08:40:37

标签: java multithreading garbage-collection

我有一些多线程Java代码。我知道我生成了三个线程。我有六个核心,所以我希望看到我的CPU使用率在0%到50%之间跳跃。但是,在添加一些新的内存密集型操作后,我发现CPU使用率上升到100% - 使用我机器的所有六个内核。

这里发生了什么?这是垃圾收集器吗?

2 个答案:

答案 0 :(得分:1)

由于许多长时间运行的线程,你必须首先找出长时间运行的线程。

您可以通过线程转储轻松找到答案。

ps -fL将为您提供一个列表并检查LWP各自的运行时间 jstack它会给你长期运行线程的十六进制值

以上PID是java进程ID。

希望它能帮助您解决问题。

答案 1 :(得分:0)

我进行了分析,看起来CPU中的峰值与GC集合同步。这是有道理的,因为Java 7的默认垃圾收集器runs in parallel by default