JVM詳解(二)之歷史上的JVM簡介

2020-08-11 16:23:44

一.Sun Classic VM

  • 早在1996年Java1.0版本的時候,Sun公司發不了一款名爲Sun Classic vm的java虛擬機器,它同時也是世界上第一款商業java虛擬機器,jdk1.4時完全被淘汰。現在hotspot內建了此虛擬機器。
  • 它的特點是:這款虛擬機器內部只提供瞭直譯器,JIT即時編譯器(它會把重複性比較高的熱點程式碼及時的編譯成本地機器指令,然後把其本地機器指令快取起來)是沒有提供的;如果只提供直譯器,執行的效率會比較低,因爲即使你有一些重複性的程式碼,直譯器每次也會逐行解釋執行。
  • 如果使用JIT編譯器,就需要進行外掛。但是一旦使用了JIT編譯器,JIT就會接管虛擬機器的執行系統,直譯器就不再工作。也就是他們兩個只能選一個,直譯器和編譯器不能配合工作。
    當然我們現在的虛擬機器已經可以把二者結合起來使用,即它們二者可以同時使用。

二.Exact VM

  • Exact VM是爲了解決上一個虛擬機器問題,在jdk1.2時,sun公司提供了此虛擬機器。它提供了準確式記憶體管理(Exact Memory Management)機制 機製,讓虛擬機器可以知道記憶體中某個位置的數據具體是什麼型別。(舉個例子,比如說在記憶體空間中有一個數12345,那12345它到底表示一個數的數值爲12345,還是某個物件的地址值是12345呢,這個在我們的Exact VM中就可以區分了,但是在我們的Sun Classic VM中它是沒法做這樣的區分。Sun Classic VM可以通過handle的方式去額外的記錄地址值,但這增加了我們查詢物件的開銷。)
  • 增加了編譯器與直譯器混合工作模式;在JIT編譯器在工作的時候可以進行熱點探測,可以探測出哪些程式碼屬於高頻的熱點程式碼,針對熱點程式碼進行即時編譯。
  • ps:Exact VM它解決了Sun Classic VM的一些弊端,但是它卻只在sun公司自己的Solaris平臺短暫使用,當時其他平臺上還是使用的classic vm,還沒等它在其他平臺上使用就被Hotspot虛擬機器替換了。Exact VM整個的生命週期是比較短暫的!

三.HotSopt VM

  • HotSpot歷史:最初由一家名爲「Longview Technologies」的小公司設計;Sun公司注意到了這款虛擬機器在JIT編譯上有許多優秀的理念和實際效果,在1997年收購了此公司,從而獲得了HotSpot VM;在2009年,Sun公司被Oracle公司收購。
  • 在JDK1.3時,HotSpot VM成爲預設虛擬機器。
  • 名稱中的HotSpot指的就是它的熱點程式碼探測技術,(而Exact VM之中也有與HotSpot幾乎一樣的熱點探測,爲了Exact VM和HotSpot VM哪個成爲Sun主要支援的VM產品,在Sun公司內部還有過爭論,不過最終還是HotSpot打敗Exact。)通過計數器找到最具編譯價值的程式碼,觸發即時編譯(JIT)或棧上替換;它可以通過編譯器與直譯器協同工作,在最佳化的程式響應時間與最佳執行效能中取得平衡。
  • 目前HotSpot佔用絕對的市場地位,從伺服器、桌面到行動端、嵌入式都有應用。它也是Sun/Oracle JDK和OpenJDK的預設虛擬機器。

四.JRockit

  • Oracle JRockit (原來的 Bea JRockit)系列產品是一個全面的Java執行時解決方案組合,包括了行業最快的標準Java解決方案。
  • JRockit面向延遲敏感型應用的解決方案JRockit Real Time提供以毫秒或微秒級的JVM響應時間,適合財務前端辦公、軍事指揮與控制和電信網路的需要。
  • JRockit專注於伺服器端應用,它可以不太關注程式的啓動速度,因此JRockit內部不包含解析器實現,全部程式碼都靠即時編譯器編譯後執行。
  • 大量的行業基準測試顯示,基本JRockit JVM是世界上最快的JVM;使用JRockit產品,客戶已經體驗到了顯著的效能提高(一些超過了70% )和硬體成本的減少(達50%)。
  • 在2008年和2009年,Oracle公司分別收購了BEA公司和Sun公司,這樣Oracle就同時擁有了兩款優秀的Java虛擬機器:JRockit VM和HotSpot VM。Oracle公司宣佈之後將會完成這兩款虛擬機器的整合工作(大致在JDK8中完成),使之優勢互補。
    整合的方式大致上是在HotSpot的基礎上,移植JRockit的優秀特性,譬如使用JRockit的垃圾回收器與MissionControl服務,
    使用HotSpot的JIT編譯器與混合的執行時系統;但是呢,它們兩個的架構其實區別很大,能整合的還是比較有限的。

五.J9

  • 全稱:IBM Technology for Java Virtual Machine,簡稱IT4J,內部代號:J9,大家習慣用它的內部代號來指代IBM研發的這款虛擬機器。
  • 它的市場定位於HotSpot接近,伺服器、桌面到行動端、嵌入式都有應用,是多用途的JVM。
  • 廣泛應用於IBM的各種Java產品中。
  • 目前,有影響力的三大商用虛擬機器之一(HotSopt,JRockit和J9),也號稱是世界上最快的Java虛擬機器,但是從數據上來看是比不上JRockit的,它在IBM自己的產品中測試效果還是很不錯的。
  • 在2017年左右,IBM發佈了開源J9 VM,命名OpenJ9,交給Eclipse基金會管理,也稱爲Eclipse OpenJ9。

六.Microsoft JVM

  • 微軟爲了在IE3瀏覽器中支援JAVA Applets,開發了Microsoft JVM,只能在Windows平臺下執行,但卻是當時windows下效能最好的Java JVM。
  • 1997年,Sun以侵犯商標、不正當競爭罪名指控微軟成功,賠了Sun很多錢,微軟在WindowsXP SP3中抹掉了其JVM。現在windows上安裝的jdk都是HotSpot。

七.KVM

  • KVM(Kilobyte)是CLDC-HI早期產品,在 Android、IOS 等智慧手機操作系統出現之前,曾廣泛應用於手機平臺的一種虛擬機器。
  • 基於KVM簡單、輕量、高度可移植的特點,它在更低端的裝置上還維持着自己的一片市場,比如智慧控制器、感測器,老人手機等。

八.CDC/CLDC HotSpot

  • CDC和 CLDC HotSpot 分別是 Sun 公司針對高階嵌入式裝置和中低端嵌入式裝置的虛擬機器,用來代替 KVM。

九.Azul VM

  • Azul VM是Azul Systems公司在HotSpot基礎上進行大量改進,執行於Azul Systems公司的專有硬體Vega系統上的Java虛擬機器。由於是與特定硬體平臺系結、軟硬體配合的專有虛擬機器,它的效能可以更好的針對硬體進行優化。稱得上是高效能Java虛擬機器中的戰鬥機。
  • 每個Azul VM範例都可以管理至少數十個CPU和數百GB記憶體的硬體資源,並提供在巨大記憶體範圍內實現可控的GC時間的垃圾收集器、專有硬體優化的執行緒排程等優秀特性。
  • 在2010年,Azul Systems公司開始從硬體轉向軟體,發佈了通用平臺虛擬機器Zing JVM,可以在通用X86平臺上提供接近於Vega系統的特性。

十.Zing JVM

  • Azul公司的Zing JVM是從HotSpot fork出來的商業JVM,Azul爲它重新寫了一套GC,它以Sun的HotSpot VM爲基礎,改進了許多會影響延遲的細節,主要特點是:
    • 低延遲、「無暫停」(pauseless)的C4 GC,GC帶來的暫停可以控制在10ms以下的級別,支援的Java堆大小可以到1TB;
    • 快速預熱,可以使用上一次收集的profile,減少JIT預熱時間。

十一.Liquid VM

  • Liquid VM即是現在的JRockit VE(Virtual Edition),它是由BEA公司開發,可以直接執行於自家的Hypervisor系統上。
  • Liquid VM不需要操作系統的支援,或者說它自己本身實現了一個專有操作系統的必要功能,如執行緒排程、檔案系統、網路支援等。由虛擬機器越過通用操作系統直接控制硬體可以獲得很多好處,如線上程排程時,不需要再進行內核態/使用者態的切換等,這樣可以最大限度地發揮硬體的能力,提升Java程式的執行效能。所以與Azul VM一樣稱得上是高效能Java虛擬機器中的戰鬥機。
  • 隨着JRockit虛擬機器終止開發,Liquid VM專案也停止了。

十二.Apache Harmony

  • Apache曾推出過於JDK1.5和JDK1.6相容的Java執行平臺Apache Harmony,它是IBM和Intel聯合開發的開源JVM,受到同樣開源的OpenJDK的壓制 壓製,SUN堅決不讓Harmony獲得JCP認證,最終於2011年退役,IBM轉而參與OpenJDK。雖然目前Apache Harmony並沒有被大規模商用,但是它的Java類庫程式碼卻被吸納進了Android SDK。

十三.Taobao JVM

  • Taobao JVM 也稱阿裡JVM,阿裡集團作爲中國最大的Java技術應用方,針對淘寶應用需求的JVM的優化定製是必要且收益巨大的。TaobaoJVM是基於OpenJDK VM並根據淘寶業務、應用特點及開發者需求開發的穩定,高效且深度定製的JVM版本。是國內第一個優化、定製且開源的伺服器版Java虛擬機器。
  • 2010年開始,阿裡核心繫統部專用計算組基於OpenJDK6 Hotspot JVM定製優化自己的JVM,經過幾次雙11的考驗。2013年開始,改爲基於OpenJDK7,並改名爲阿裡JVM。
  • 它的特點有以下幾個方面:
    • 創新的GCIH(GC invisible heap)技術實現了off-heap,即將生命週期較長的Java物件從heap中移到heap之外,並且GC不能管理GCIH內部的Java物件,以此達到降低GC的回收評率和提升GC的回收效率的目的;
    • GCIH中的物件還能夠在多個Java虛擬機器進程中實現共用;
    • 使用crc32指令實現JVM intrinsic降低JNI的呼叫開銷;
    • PMU hardware的Java profiling tool和診斷協助功能;
    • 針對大數據場景的ZenGC。
  • taobao JVM應用在阿裡產品上效能高,硬體嚴重依賴intel的cpu,損失了相容性,但提高了效能。

十四.Graal VM

  • 2018年4月 Oracle Labs公開了Graal VM,號稱「Run Programs Faster Anywhere」,勃勃野心;2019年5月 才發佈了第一個 Release 版本,提供社羣版和企業版。
  • Graal vm在HotSpot VM基礎上增強而成的跨語言全棧虛擬機器,可以作爲「任何語言」的執行平臺使用。語言套件括:java、Scala、Groovy、Kotlin、C、C++、JavaScript、Ruby、Python、R等。
  • 可以直接把 Java 應用編譯成機器碼,執行起來體積更小、啓動速度更快。
  • 支援不同語言中混用對方的介面和物件,支援這些語言使用已經編寫好的本地庫檔案;工作原理是將這些語言的原始碼或原始碼編譯後的中間格式,通過直譯器轉換爲能被Graal VM接受的中間表示。Graal VM提供Truffle工具集快速構建而向一種新語言的直譯器。在執行時還能進行即時編譯優化,獲得比原生編譯器更優秀的執行效率;如果說HotSpot有一天真的被取代,Graal VM希望最大。