我编写了一个计算量很大的单线程程序,但是当我执行它时,我惊讶地发现我的四核处理器的利用率为95%。我期待看到接近25%的利用率(一个核心)。我使用了来自 sysinternals 的 Process Explorer ,并且进一步惊讶地发现Java进程有六个线程,负载分布几乎相同,总处理器时间约为16%。
最初我打算并行化我的代码,但现在似乎我不会获得任何性能,因为即使使用非并行代码,CPU已经达到95%的负载。
似乎Java在某种程度上会自动并行化我的代码,但网络上的所有内容都告诉我这不可能是真的。有谁知道发生了什么事?
编辑:我添加了一些截图,希望能回答下面的一些问题:
系统处于空闲状态 - 1%负载。我是一个具有8个逻辑核心的四核CPU。
答案 0 :(得分:2)
在我使用的大多数系统中,使用百分比实际上是该进程使用的一个核心功能的百分比。如果您的系统是这样的,那么您只是错误地解释了使用百分比。也就是说,java使用95%的一个 CPU。不确定这是不是正在发生的事情,但它可以解释一个不平行的程序如何以95%显示。
编辑:根据您的修改,似乎并非如此。也许像@a_horse_with_no_name在评论中建议,您的代码是使用并行流还是其他自动并行化操作?
答案 1 :(得分:-4)
Java没有并行化代码。 Java正在并行化。记住Java在虚拟机中运行。该虚拟机本身就是一个程序。