天天看點

JVM的"發家"史

目前java虛拟機中最出名的應該就是HotSpot VM了,它是Sun JDK和OpenJDK中所帶的虛拟機,也是目前使用範圍最廣的java虛拟機。HotSpot VM具有熱點代碼探測能力,可以通過執行計數器找出程式中最具編譯價值的代碼,然後通過JIT編譯器以方法為機關進行編譯,如果一個方法被頻繁調用,或方法中有效循環次數很多,将分别觸發标準編譯和OSR(棧上替換)編譯動作。通過與解釋器恰當地協同工作,以減少編譯時間壓力跟平衡性能。

JVM的"發家"史

除此之外,JRockit VM,BEA公司的虛拟機,一款專門為伺服器硬體和伺服器端應用場景高度優化的虛拟機,。由于專注于伺服器端應用,它可以不太關注程式啟動速度,是以 JRckit不太關注程式的啟動速度,是以JRockit内部不包含解析器實作,全部代碼都靠即時編譯器編譯後執行,JRockit的垃圾收集器和MisssionControl服務套件等部分的實作,在衆多java虛拟機中也一直處于領先水準。

JVM的"發家"史

IBM J9 VM,市場定位與Sun的HotSpot比較接近,是一款設計上從伺服器端到桌面應用再到嵌入式都全面考慮的多用途虛拟機。

ART:(Android runtime)安卓4.4以後的虛拟機。ART 的機制與 Dalvik 不同。在Dalvik下,應用每次運作的時候,位元組碼都需要通過即時編譯

器轉換為機器碼,這會拖慢應用的運作效率,而在ART 環境中,應用在第一次安裝的時候,位元組碼就會預先編譯成機器碼

,使其成為真正的本地應用。這個過程叫做預編譯(AOT,Ahead-Of-Time)。這樣的話,應用的啟動(首次)和執行都會變得更加快速。

除了上述三款流行的VM外,還有兩款虛拟機對虛拟機發展産生重要影響:

Apache Harmony是Apache軟體基金會旗下以Apache License協定開源的實際相容于JDK1.5和JDK1.6的java程式運作平台。因為Sun公司的原因,沒有通過TCK(Technology Compatibility Kit)測試,該項目期望支援盡可能多的不同平台,于2011年停止開發。目前,Dalvik虛拟機, Google Android平台所使用的虛拟機,使用了Harmony部份的子集,作為它核心的類庫。

JVM的"發家"史

Dalvik VM :目前安卓平台的一款虛拟機,沒有遵循java虛拟機規範,不能直接執行java的Class檔案,使用的是寄存器架構而不是JVM中常見架構。(一般來說,基于堆棧的機器必須使用指令才能從堆棧上的加載和操作資料,是以,相對基于寄存器的機器,它們需要更多的指令才能實作相同的性能。但是基于寄存器機器上的指令必須經過編碼,是以,它們的指令往往更大。這種差異主要是VM機對的操作碼排程造成的,它們往往比其他的因素昂貴,比如說及時彙編。)是Google等廠商合作開發的Android移動裝置平台的核心組成部分之一。它可以支援已轉換為 .dex(即Dalvik Executable)格式的Java應用程式的運作,.dex格式是專為Dalvik設計的一種壓縮格式,适合記憶體和處理器速度有限的系統。Dalvik 經過優化,允許在有限的記憶體中同時運作多個虛拟機的執行個體,并且[1] 每一個Dalvik 應用作為一個獨立的Linux 程序執行。獨立的程序可以防止在虛拟機崩潰的時候所有程式都被關閉。2014年6月25日,Android L 将正式亮相于召開的谷歌I/O大會,Android L 改動幅度較大,谷歌将直接删除Dalvik,代替它的是傳聞已久的ART。安卓4.4新增的ART模式優化更高,運作更為高效,占用更小的RAM記憶體以及顯著提升流通流暢性,更省電,但目前APP啟動和相容還優待提高。

JVM的"發家"史

除了上述虛拟機外,這裡再介紹兩款真正高性能的java虛拟機,他們都是針對特殊平台開發的。

Azul VM基于HotSpot基礎上改進所得,每個Azul VM執行個體都可以管理至少數十個CPU和數百GB記憶體的硬體資源,并提供巨大記憶體範圍内實作可控的GC時間的垃圾收集器、為專用硬體優化的線程排程等優秀特性。現在主要用于Vega平台,在x86平台上也已經接近在Vega上的性能。

Liquid VM即現在的JRockit VE(Virtual Edition)版本,自身實作了一個專用作業系統的必要功能,是“由虛拟機越過作業系統直接控制硬體”的模式,更能發揮硬體性能,提升java程式性能。

繼續閱讀