2009-07-17 99 views
6

隨着時間的推移,Sun的JVM和JIT變得非常聰明。過去常常被認爲是必要的微觀優化的東西不再需要,因爲它會得到照顧。智能JVM和JIT微優化

例如,過去應該將所有可能的類標記爲final,以便JVM儘可能多地嵌入代碼。但是現在,JIT知道你的類是否是最終的,基於哪些類在運行時被加載,並且如果你加載一個類來使原始類不能最終結束,那麼它將取消內聯方法並將其標記爲最後。

JVM或JIT爲您做了哪些其他智能微優化?

編輯:我做了這個社區wiki;我想收集這些隨着時間的推移。

回答

6

這是令人印象深刻的。所有這些都是你在C++中做的事情(當然與Java相同)。請記住,早期版本的Java由於沒有這些東西而開始了「緩慢」的聲譽,並且隨着時間的推移,我們不斷改進顯着。這仍然是一個很大的研究領域。

+0

好的java可能很聰明,但它仍然使用很多資源 – Roch 2009-11-25 13:36:46

+2

@mnml它比流行的意見是少的。創建一個對象,我認爲他們把它歸結爲2或3條指令。是的,像C++一樣速度通常更快,但「資源」不僅僅是CPU和內存;這也是人潮。硬件很便宜,人們很貴。從長遠來看,Java通常會在性能上勝出,因爲它的JIT非常驚人,並且會比大多數C++應用程序所夢想的更優化應用程序。 – 2010-04-19 20:07:18

+1

@亞歷希望我可以給你代表指出人是資源。儘可能相信這一點。作爲一名員工,你的時間往往比公司花費更多的錢,而不是說硬盤中額外增加了1 TB的數據,或者在老式的網絡服務器中使用更好的CPU。 – 2011-01-28 18:51:21

3

Java是在更智能的內聯,因爲它可以

  • 內聯代碼僅在運行時可用 或甚至動態生成的。
  • 內嵌虛擬方法(一次最多兩個)
  • 對內聯方法及其內聯方法執行換碼分析。 (很難在C++中使用 )