2012-06-28 58 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的帖子中沒有看到任何表明他正在這樣做的內容,但是這個帖子在細節上很短。 –