近日,IBM將其J9 Java 虛擬機命名為OpenJ9,托管至Eclipse基金會并在GitHub上開源,OpenJ9的定位是企業級的開源Java虛擬機。
在2006年9月20舊金山舉辦的JavaOne上,IBM就曾宣布開源其Java虛擬機OpenJ9,該項目的領導者Dan Heidinga做過J9相關的技術演講,闡述了該虛擬機的技術架構和相關的生態系統。當時,IBM計劃隨Java 9一起開源其OpenJ9。根據Dan Heidinga的描述,OpenJ9的核心價值在于高性能、高可用性和適用性。OpenJ9的技術架構如下所示:
為了實現性能的提升,OpenJ9在數據結構、類加載、線程管理、解釋器等方面都進行了優化。按照IBM的規劃,OpenJ9與Eclipse OMR的關系如下圖所示:
其中,Eclipse OMR是用于構建可靠、高性能語言運行時的跨平臺組件。這組件使用C和C++編寫,借助它能夠構建跨不同硬件和操作系統平臺的語言運行時,該項目也在GitHub開源。根據RednaxelaFX的解讀,OMR是最上游,OpenJ9基于OMR構建出一個完整的JVM,OpenJ9 + OpenJDK Java Class Library構成出一個完整的Java運行時環境,然后在此基礎上添加IBM的特化功能最終構成IBM發行版J9及其配套庫。
關于公眾可能關注的問題,Eclipse OpenJ9在官網上進行了回應 。
Eclipse OpenJ9 是 OpenJDK 的替代方案嗎?
不是。Eclipse OpenJ9 是一個 Java 虛擬機(JVM),也就是運行 Java 應用程序的引擎,而 OpenJDK 是一個完整的開發工具包,除了JVM還包含其他的組件比如Java類庫。默認情況下,OpenJDK 使用名為 Hotspot 的 JVM進行構建。簡單來說,OpenJ9 是JVM的替代方案,可將其包含到 OpenJDK的二進制文件中。
Eclipse OpenJ9與Hotspot 的差別在哪里?
Hotspot 和 Eclipse OpenJ9 都是可以包含在 OpenJDK中的 Java 虛擬機,但它們具有不同的功能。按照不同的構建過程,你可以讓OpenJDK二進制文件中包含 Eclipse OpenJ9 ,也可以包含 Hotspot。
OpenJ9中的J9代表什么含義呢?
為了澄清公眾的誤解,J9 != Java 9。如果讀者對它名字的來源感興趣的話,可以參考這篇博客文章。
既然如此,我們為什么要使用 Eclipse OpenJ9 而不是默認的 JVM呢?
如果你正在為應用程序尋找企業級的運行時環境,那么建議使用 Eclipse OpenJ9 構建 OpenJDK。這個高性能、可擴展的虛擬機是眾多 IBM 企業軟件產品的核心。你還可以進一步地優化OpenJ9,提升特定場景下Java應用的性能。
為什么 IBM 將他們的 J9 虛擬機貢獻給了 Eclipse 基金會?
IBM 公開承諾要將創新帶入開源開發社區。多年以來,J9虛擬機是Java版IBM SDK的核心,將它開源,闡明了IBM的兌現承諾的決心。
OpenJ9 虛擬機構建在 Eclipse OMR 項目的核心技術之上,OMR 是由 IBM 在 2016 年貢獻給 Eclipse 基金會的。IBM 持續地投入資源到Eclipse OpenJ9 和 Eclipse OMR項目中,以確保企業級產品能夠利用最新的硬件技術。
OpenJ9的網站上提供了預構建版本的(通過AdoptOpenJDK下載)以及自行打包構建的完整教程。OpenJ9本身對Java應用進行了一些優化,我們無需再調整命令行選項。如果你想配置不同的垃圾收集器或者要探索特定硬件的特性的話(比如GPU),那么可以讀取IBM知識中心上已有的用戶文檔。
OpenJ9的關注點主要在性能方面,因此Phoronix Media站點的創始人Michael Larabel運行了一些快速的基準(Benchmark)測試,以了解OpenJ9和Hotspot之間性能的差異。
在測試中,他分別使用了將OpenJ9打包至OpenJDK 9的構建版本以及當時的OpenJDK 9 Hotspot構建版本(作者在進行測試時,正式版本的Java 9尚未發布——編者注),作為參考,還使用了OpenJDK 8 Hotspot構建版本。這三個JDK都可以通過AdoptOpenJDK站點獲取預先構建好的版本。
Michael使用兩臺Linux機器進行了快速的基準測試,其中一臺機器的處理器是Intel Core i9 7900X,操作系統是基于Linux 4.13 kernel的Ubuntu 17.04。另外一臺機器是雙插槽 Tyan 服務器,處理器是Xeon Gold 6138,操作系統是Debian GNU/Linux 9.1。每臺機器上都使用這三個OpenJDK進行了測試,有一些Java基準測試是通過Phoronix Test Suite運行的。
首先看一下Core i9 7900X機器的結果。Michael先在這三個OpenJDK上執行了j2dbench測試,這是一個關注圖形處理的基準測試。在使用OpenJ9時,文本渲染的速度明顯比較慢,而在另外兩個基準測試中,它與OpenJDK性能差別不大。OpenJDK 8和9本身的差別也不大。該測試結果如下圖所示:
同時,他還運行Java版本的SciMark2進行一些數學相關的基準測試,結果如下:
至少就目前來看,OpenJ9的性能要比較明顯地落后于Hotspot。
在基于Java的Bork文件加密方面,Hotspot也更快:
在這些測試版本中,JMH的性能表現也非常類似:
在雙插槽的Xeon Gold Tyan服務器上,Hotspot/OpenJ9的基準測試結果非常類似,可以參考。
OpenJ9是一個非常新的JVM項目,幾個月之后再來評估它的性能也許更合理一些。在這篇性能對比文章的評論區,有些讀者發表了一些有價值的評論。有人認為,不應該像使用OpenJDK那樣使用J9,JVM的調優知識對于性能改善至關重要。J9針對x86架構可能還不太成熟,或者需要一些配置選項。J9最初是針對大規模System-Z機器上的應用設計的,因此它需要時間來對JVM進行預熱,從而確定哪些字節碼需要進行優化,這個“分析器”需要根據應用的運行來進行調整。如果要在x86計算機或小型設備上運行J9的話,毫無疑問需要調整一些JVM的配置。
隨著OpenJ9開源資料的完善,我們會對這個JVM有更多的了解,相信它也會對整個Java社區的發展增加新的推動力。