JVM系列.歷史上出現過的Java虛擬機器

程式設計師自由之路發表於2020-08-29

HotSpot絕對是當今商用虛擬機器的王者,但是在Java歷史上出現過很多Java虛擬機器,這篇文章就來整理下歷史上出現過的Java虛擬機器以及他們的特性。

Sun Classic

Sun Classic虛擬機器是JDK 1.0預設的虛擬機器。但是這個虛擬機器不帶即時編譯技術,效能稍差。Classic虛擬機器在JDK 1.2之前是JDK中唯一的虛擬機器,在JDK 1.2時,它與HotSpot VM並存,但預設是使用ClassicVM(使用者可用java-hotspot引數切換至HotSpot VM),而在JDK 1.3時,HotSpot

成為預設虛擬機器,它仍作為虛擬機器的“備用選擇”釋出(使用java-classic引數切換),直到JDK 1.4的時候,Classic VM才完全退出商用虛擬機器的歷史舞臺,進入了Sun LabsResearch VM之中。

可以說Sun Classic虛擬機器是Java商用虛擬機器的鼻祖。

HotSpot VM

相信所有Java程式設計師都聽說過HotSpot虛擬機器,它是Sun/OracleJDK和OpenJDK中的預設Java虛擬機器,也是目前使用範圍最廣的Java虛擬機器。

HotSpot虛擬機器是Sun公司收購的專案,具有現代虛擬機器的高階特性,比如它的名字中所說的:熱點程式碼探測技術

Mobile/Embedded VM

專門針對移動裝置或者嵌入式裝置的虛擬機器。

JRockit和IBM J9

BEA System公司的JRockit,BEA公司後來被Oracle公司收購,JRockit虛擬機器也不再繼續發展。

IBM公司的J9。後來開源捐獻給了Eclipse基金會,更名為OpenJ9。

這兩款虛擬機器可以說是虛擬機器界的老二。

Liquid

Liquid也是BEA System公司開發的虛擬機器,和HotSpot、JRockit等虛擬機器專案不同,Liquid是針對特定硬體平臺的虛擬機器,而不是通用平臺的虛擬機器。

隨著BEA被Sun收購,Liquid專案也已經停止開發。

Graal虛擬機器

2018年4月,Oracle Labs新公開了一項黑科技:Graal VM,從它的口號“Run Programs Faster Anywhere”就能感覺到一顆蓬勃的野心,這句話顯然是與1995年Java剛誕生時的“Write Once,Run Anywhere”在遙相呼應。

Graal VM被官方稱為“Universal VM”和“Polyglot VM”,這是一個在HotSpot虛擬機器基礎上增強而成的跨語言全棧虛擬機器,可以作為“任何語言”的執行平臺使用,這裡“任何語言”包括了Java、Scala、Groovy、Kotlin等基於Java虛擬機器之上的語言,還包括了C、C++、Rust等基於LLVM的語言,同時支援其他像JavaScript、Ruby、Python和R語言等。Graal VM可以無額外開銷地混合使用這些程式語言,支援不同語言中混用對方的介面和物件,也能夠支援這些語言使用已經編寫好的本地庫檔案。

Graal VM的基本工作原理是將這些語言的原始碼(例如JavaScript)或原始碼編譯後的中間格式(例如LLVM位元組碼)通過直譯器轉換為能被Graal VM接受的中間表示(Intermediate Representation,IR),譬如設計一個直譯器專門對LLVM輸出的位元組碼進行轉換來支援C和C++語言,這個過程稱為程式特化(Specialized,也常被稱為Partial Evaluation)。Graal VM提供了Truffle工具集來快速構建面向一種新語言的直譯器,並用它構建了一個稱為Sulong的高效能LLVM位元組碼直譯器。

對Java而言,Graal VM本來就是在HotSpot基礎上誕生的,天生就可作為一套完整的符合Java SE 8標準的Java虛擬機器來使用。它和標準的HotSpot的差異主要在即時編譯器上,其執行效率、編譯質量目前與標準版的HotSpot相比也是互有勝負。但現在Oracle Labs和美國大學裡面的研究院所做的最新即時編譯技術的研究全部都遷移至基於Graal VM之上進行了,其發展潛力令人期待。如果Java語言或者HotSpot虛擬機器真的有被取代的一天,那從現在看來Graal VM是希望最大的一個候選項,這場革命很可能會在Java使用者沒有明顯感覺的情況下悄然而來,Java世界所有的軟體生態都沒有發生絲毫變化,但天下第一的位置已經悄然更迭。

相關文章