2009-12-28 50 views
6

下面是我聽到很多在整個高中和大學的計算機科學課程的一句話:「現代JVM」與舊JVM有什麼不同?

「這不是現代的JVM的問題。」

通常這會出現在關於整體性能或優化策略的討論中。儘管它總是被視爲一種神奇的最終答案,好像它讓問題不再值得思考。這讓我想到:原型「現代JVM」與舊JVM之間有什麼區別?

+1

二進制日期戳:-P – TofuBeer 2010-01-09 04:21:54

+0

@TofuBeer:謝謝你,上尉明顯。正確和簡潔,所以+ 1 /接受。哦,等待... – Pops 2010-01-09 15:55:13

+0

相關的問題,解釋垃圾收集位更詳細:http://stackoverflow.com/questions/2931170/does-variable-null-set-it-for-garbage-collection – Pops 2010-05-28 19:18:25

回答

6

JVM技術最顯着的改進是JIT:Just In Time編譯器。 JIT在運行時對代碼進行優化,從而產生巨大的性能提升,這使得Java(至少在某些領域)與C/C++程序具有競爭力。

有關動態優化(如代碼運行)與靜態優化(編譯期間)的好處的有趣討論可以在Steve Yegge的講座中找到:http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html(其中,BTW本身很有趣)。

與JIT並不完全無關的其他JVM改進是爲類方法和接口方法更快地分派虛擬方法。

6

非協調同步過去很慢。
垃圾收集速度快了很多。
熱點優化已經變得更好。
一些非常舊的JVM只有green threads

+1

我打算說'現代JVM'更像是關於原JVM的糟糕表現,而不是關於當代的說法 – Jherico 2009-12-28 20:54:54

1

基於分析信息和從字節碼派生的其他信息現代JIT可以積極地優化機器代碼:可與來自預期使用衍生的優化電平來產生

  • 機代碼(這是所使用的很多,也許它會用得更多)。這有助於很多!
  • 對object.getFoo()的調用可以內聯,因此方法的內容直接放置在生成的代碼中,而無需方法調用。這可以遞歸地完成,並且可能導致複雜的代碼被實際完成的幾條指令替換。
  • 垃圾收集已大大改善。這意味着很多時間沒有花費。