2

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

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

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

我还尝试在终端中将我的进程的优先级设置为 -15,但没有明显差异。

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

4

2 回答 2

3

我看到了两种可能性

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

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

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

如果可能的话,并行性将修复#2,甚至可能会通过一些设计更改甚至#1

于 2013-08-27T09:01:48.870 回答
1

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

通常,尽管我确信有例外,但人们会看到程序卡在 100% 的 CPU 使用率上,这表明存在错误。

这样做的原因是,每当您的进程使用外围组件时,程序将等待组件返回,而在进程等待时,它会将控制权传递给其他进程。在这种情况下,外围设备包括 RAM 之类的东西。

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

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

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

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

于 2013-08-27T09:14:24.063 回答