2008-09-09 59 views

回答

1

內存性能或CPU性能?或者這些日子他們是一樣的嗎?我的唯一證據是軼事,並在一個不同的平臺上:將一堆渴望CPU的應用程序移植到C#(.NET 2.0)之後,我沒有注意到性能上的重大損失(我不認爲10%的實質性)。編寫良好的代碼似乎在各種架構上表現良好。

大多數應用程序與花/浪費時間:

  • IO操作不會從靜態(編譯時)的分析中獲益。
  • 不會從靜態分析中受益的錯誤算法。
  • 關鍵CPU內部循環中的內存佈局不良。雖然編譯器在技術上有可能幫助我們,但我還沒有看到真正的編譯器做任何有趣的事情。

因此,根據我的經驗,除非您正在編寫視頻編解碼器,否則編譯Java應用程序與僅依賴熱點編譯器無關。

4

還有一些軼事證據。我已經參與了一些性能關鍵的實時交易財務應用程序。我同意弗蘭克的觀點,幾乎每次你的問題不是缺乏被編譯的時候,它就是你的算法或數據結構。現代的熱點編譯器使用正確的代碼非常好,例如CERN Colt library在編譯和優化Fortran的90%以內,用於數字化工作。

如果您擔心速度問題,我真的會推薦一個好的分析器並獲得有關瓶頸位置的證據 - 我使用YourKit並且非常高興。

在過去的幾年中,我們只使用了本機編譯代碼來提高速度,這樣我們就可以使用CUDA並獲得一些嚴重的GPU性能。

2

你的問題有點大,得到的答案相差很多

  • 如果您正在使用即時編譯(JIT)或不
  • 當您使用,,如果你的進程的執行很長時間沒有

所有最近的JVM使用JIT,但在舊的JVM上,java代碼比本機代碼慢了幾倍。

如果您有一臺長時間運行的服務器或一次又一次執行相同代碼的批處理,則差異會很小。

我們在C++和Java中都編寫了相同的批處理,並使用不同的數據集運行它,結果相差大約3秒,數據集從5分鐘到幾個小時不等。

但是要小心,它們會有一個重要的區別,例如需要大量內存的批處理。

-2

嘗試了六種不同的實現方式的Hello-World,只是爲了檢查開銷 而且差別是驚人的。 Java不在圖表中,而編譯的語言同樣出色。如果需要的話,我可以證明所有證據(可重現)。

+1

Hello World並不代表現實生活中的工作量,我懷疑它是由JVM優化的。對於這種非常小的情況,與編譯語言相比,Java很可能會失去它。 – nhahtdh 2013-09-06 20:05:17