下面部分轉自:https://www.jianshu.com/p/916b5fcd0140
OpenJ9,OMR與OpenJDK
Eclipse OpenJ9 是一個 Java 虛擬機(JVM),它是運行 Java 應用程序的引擎,而 OpenJDK 是一個完整的開發工具包,包含其他組件,如Java 類庫以及 JVM。默認情況下,OpenJDK 使用名為 Hotspot 的 JVM。簡單地說,OpenJ9 是一個 JVM 替代方案,可將其作為 OpenJDK 二進制文件的一部分。
而OpenJ9其自身是基於IBM開源的OMR項目所構建,OMR項目由一個高度集成的開放源碼C和c++組件,可用於構建大量的語言,運行時支持許多不同的硬件和操作系統平台。這些組件包括但不限於:內存管理,線程處理,平台端口(抽象)庫,診斷支持,監控支持,垃圾收集和本地實時編譯。OMR的意圖在於讓實現語言的人能夠重用IBM在Java運行時方面所投入的數百開發人年所取得的成果,能夠受益的包含已有的語言如Ruby、Python、Javascript等等,它還能加快新語言的創建過程。
OpenJ9,OMR和OpenJDK的關系如下圖所示:

在上圖中,箭頭起點表示了上游的開源項目,而這點可以通過運行java -version的輸出可以看到,如下:
openjdk version "1.8.0_162"
OpenJDK Runtime Environment (build 1.8.0_162-b12)
Eclipse OpenJ9 VM (build openj9-0.8.0, JRE 1.8.0 Linux amd64-64 Compressed References 20180315_120 (JIT enabled, AOT enabled)
OpenJ9 - e24e8aa9
OMR - 3e8296b4
JCL - ee1e77df1d based on jdk8u162-b12)
OpenJ9的性能測試
讓我們來看看OpenJ9給出官方測試結果,在測試中所使用的負載是daytrader7這個基准測試項目,其地址是:https://github.com/wasdev/sample.daytrader7,它是一個圍繞在線股票交易系統范例構建的應用程序,該應用程序允許用戶登錄,查看其投資組合,查詢股票報價以及買入或賣出股票股票;借助基於Web的加載驅動程序(如Apache JMeter),DayTrader提供的實際工作負載可用於衡量和比較各種供應商提供的Java平台企業版(Java EE)應用程序服務器的性能。除了完整的工作負載之外,應用程序還包含一組用於各種Java EE組件和通用設計模式的功能和性能測試的原語。 DayTrader的新設計涵蓋Java EE 7,包括新的WebSockets規范。其他Java EE特性包括JSP,Servlet,EJB,JPA,JDBC,JSF,CDI,Bean驗證,JSON,JMS,MDB和事務(同步和異步/兩階段提交)。
其性能的測試結果查看:https://www.eclipse.org/openj9/oj9_performance.html#g1,
從這些測試結果中,與Hotspot相比OpenJ9有如下的優勢:
1)啟動時的內存占用減少了66%
2)負載穩定后的內存占用減少了63%
3)啟動時間縮短了42%
4)吞吐量相近
5)在CPU受限的環境中能更快的達到最大吞吐量
在 Java 的世界中,大多人都熟悉 OpenJDK。這是一個完全的 JDK 實現,包括對 HotSpot JVM 引擎的實現。不是很多開發者了解或嘗試選擇 HotSpot。詢問周圍的同事后,他們都記得 JRockit 這個名字,但沒有人提起 IBM J9 及(或) Eclipse OpenJ9。
我已經了解到了 OpenJ9 擅長於內存管理,而且在雲/容器中的使用上已經經過了精簡。OpenJ9 是一個獨立的對 JVM 的實現。它源於 IBM 的 Java SDK/IBM J9,它的歷史能追溯到 OTI Technologies Envy Smalltalk(感謝 Dan Heidinga!)。
隨着微服務使用率的提升(而且 Java 中的大多數服務都不是特別小)。我認為它將會再次變成一個熱門話題!
下面部分轉自: https://www.jianshu.com/p/621ca456822f
OpenJ9主要有如下幾個組件組成:
1)Class loader:類加載器
2)Interpreter:解釋器,負責解釋字節碼
3)Platform port library layer:操作系統和JVM直接的抽閑層
4)Garbage collector (GC):垃圾回收器
5) Just-In-Time (JIT) compiler (codenamed Testarossa or TR JIT in J9):及時編譯器
6) JVM Application Programming Interface (API):應用編程接口
7) Monitoring and Diagnostic component:監控診斷組件
如下圖所示:

類加載器和解釋器是JVM的基本組件,通常從應用程序啟動時就開始執行,而 平台端口庫層提供JVM和底層操作系統之間的抽象層,允許在代碼庫中的一個位置管理大部分平台特定的細節,如文件I / O和內存分配。
openJ9 VM可以配置許多不同的Java類庫(JCL)版本,以生成不同版本的IBM SDK for Java,這樣就可以在OpenJ9的JVM上支持java8.0,9.0和10