为什么我的java代码在没有GUI的情况下仅使用大约20%的CPU

时间:2013-08-27 08:59:13

标签: java eclipse shell console

我正在做一个有两个版本的java程序:一个带GUI,另一个没有。

我很满意GUI,因为它一直使用100%的CPU,但没有(假设速度更快)只占CPU的5-25%。两个版本在计算方面完全相同。当我从Eclipse和shell运行时会发生同样的问题。

我考虑过使用-Xms和-Xmx分配更多内存,但不会改变CPU使用率。

我也尝试将优先级设置为优秀,我的流程在终端设置为-15,但没有明显区别。

如何在Eclipse和终端中确保我的代码具有100%的CPU。

2 个答案:

答案 0 :(得分:3)

我看到了两种可能性

  1. 您确定它受CPU限制吗?在那里放一个无限循环,看看它是否有峰值。

  2. 你的PC是四核吗?对于你的PC和GUI,可能100%是25%,多线程可能会更好地使用CPU。

  3. 既然你说这是非GUI版本,你是否会过度使用println,即非缓冲打印?

  4. 如果可能的话,并行性将解决#2问题,甚至可能会进行一些设计更改#1

答案 1 :(得分:1)

100%的CPU利用率是一个问题,而非目标。

通常情况下,虽然我确定存在例外情况,但人们会看到一个程序在100%的CPU使用率下被视为错误的指示。

这样做的原因是,只要你的进程使用外围组件,程序就会等待组件返回,当进程等待时,它会将控制权传递给其他进程。在这种情况下,外设包括像RAM这样的东西。 / p>

因此,单个处理程序保持100%CPU使用率意味着它会循环执行指令,但从不接触非常有限的资源集。特别是你的程序不会触及RAM,在java中这意味着你的程序不会调用函数。 - 所以可能你的程序卡住了。

多线程程序要复杂得多,因为程序可以将控制权传递给同一程序的其他部分。

最终你应该考虑的问题是; GUI程序是否比非GUI程序更快地完成任务?如果确实如此,那么有理由看看为什么会这样,并且很可能这些原因归结为并行处理*。如果GUI比非GUI使用更多时间,那么在将GUI程序与非GUI程序进行比较时,低CPU使用率是一个额外的好处。

*编辑补充:并发处理编程是一个巨大的复杂因素。在走这条路之前,确保潜在的好处是值得的。