2012-06-28 114 views
0

我在Java中有一个外部循环和几个嵌套循环的代码。表现并不理想。我可以采取哪些策略来提高整体绩效?如何提高java的性能速度?

For(int I = 0; I < 20000000; < i++) // 20 million iterations in outer loop 
{  
    For(…) 

    For(…) 

    For(…) 

    method... 

    method...  
} 
+1

不是没有给我们更多的细节;根据你提供的细节数量,几乎没有什么可以说的。 –

+1

工作更聪明,不难。 –

+0

我要推翻这一趋势,并投票重新开放,因为这不是“只与一个小的地理区域,特定的时刻或非常狭窄的情况相关,而这种情况通常不适用于全球的互联网用户” 。相反,许多初级程序员可能有这个确切的问题**。这是一个基本问题吗?是。因此,是否存在重复,这应该关闭?也许。但是,这是因为正确的原因而关闭它。 –

回答

4

您正在遗漏很多细节。然而...

如果4个不同的for循环不必按顺序发生,您可以在单独的线程上运行每个for循环。

如果您有超过1个CPU内核运行代码,则整体性能会提高。

除此之外,知道您是否可以提高性能的最佳方法是查看时间花在哪里。在分析器中运行你的代码。

+0

嗨,我的工作空间提供12台电脑与Linux系统,每个人有96 GB的RAM和32核心CPU。有没有什么方法可以提高硬件速度? –

+0

当然。针对可以并行处理的任何内容运行多个线程,并在各个计算机之间分发工作。您需要提供更多有关您的工作性质的细节,以获得有关在多台计算机之间分割工作的建议。 –

0

不知道详细信息很难说:-)运行for循环不应该花这么长时间。

如果你有小的操作,你应该做一些microbenchmarking(见herehere)。

如果你做一个稍微复杂一些的东西,你需要做一些剖析(Eclipse中,NetBeans的带有自己的探查,你也可以尝试JProfiler但也有quite a lot of alternatives)。

0

如果您可以并行化循环,则可以在多个内核上运行它。或者你可以购买更快的CPU。

0

我改进了C#for循环的性能,其中yield return。我认为你一定要评估使用它。

检查this SO问题,指出如何在Java中使用它。

这是直接链接到Java库 - 从答案 - :

  1. Article
  2. Library
+0

他的代码是用Java编写的。关于C#的建议如何提供帮助?而且,“收益回报”并不总是最快捷的做法。这取决于你在做什么。 –

+0

@EricJ。这就是为什么我把Java链接库....完全同意,收益率回报并不总是最快的方式做事,但有时它可以真正帮助。 –

+1

我错过了Java链接。感谢您加粗它:-)但是,这只会有助于当循环会返回某种集合时,实际上处理该集合中的对象的代码一次只需要它们一个(避免创建一个内存和时间成本集合只是为了保存返回值,这是不需要的)。在OP的帖子中没有看到任何表明他正在这样做的内容,但是这个帖子在细节上很短。 –