note: 在k8s構建項目的時候,選擇不同鏡像造成啟動失敗的問題,最終查證是jdk鏡像的問題,下面簡單匯總一下 Oracle JDK與OpenJDK 的對比
Oracle JDK與OpenJDK里的JVM都是HotSpot VM。從源碼層面說,兩者基本上是同一個東西。
從JDK7開始,Oracle JDK里的HotSpot VM,在研發的時候其實就是用放在OpenJDK的Mercurial代碼庫。也就是說跟大家從外部能實時看到的OpenJDK用的是同一個代碼庫。
HotSpot VM只有非常非常少量的功能沒有在OpenJDK里,那部分在Oracle內部的代碼庫里。這些私有部分都不涉及JVM的核心功能。
所以當一個Oracle員工要構建OpenJDK時,他要做的事情跟外面的人一樣:從http://hg.openjdk.java.net簽出代碼,構建。
而當他要構建Oracle JDK時,他同樣需要先從http://hg.openjdk.java.net簽出OpenJDK,然后從Oracle內部的代碼庫簽出私有的部分,放在OpenJDK代碼下的一個特定目錄里,然后構建。
這些HotSpot VM私有的部分主要是Java Flight Recorder的內部實現,以及還有沒有公開到OpenJDK的其它平台的port,例如Oracle自己的ARM、PPC版HotSpot VM。
JDK6的代碼,由於歷史原因,Sun JDK6跟OpenJDK6的代碼並不同步。但是其中的HotSpot VM仍然是相對一致的。OpenJDK 6里的HotSpot VM只缺了一個Oracle JDK里才有的優化,那就是-XX:+UseCompressedString。這個功能實現得不太好,沒帶進JDK7/OpenJDK7,所以這點差異沒有也罷。
OpenJDK原是SunMicrosystems公司為Java平台構建的Java開發環境(JDK)的開源版本,完全自由,開放源碼。Sun Microsystems公司在2006年的JavaOne大會上稱將對Java開放源代碼,於2009年4月15日正式發布OpenJDK。甲骨文在2010 年收購SunMicrosystem之后接管了這個項目。
Oracle/Sun JDK里面包含的JVM是HotSpotVM,HotSpot VM只有非常非常少量的功能沒有在OpenJDK里,那部分在Oracle內部的代碼庫里。這些私有部分都不涉及JVM的核心功能。所以說,Oracle/Sun JDK與OpenJDK其實使用的是同一個代碼庫。
值得注意的是,Oracle JDK只發布二進制安裝包,而OpenJDK只發布源碼。
總結:
- Oracle JDK版本將每三年發布一次,而OpenJDK版本每三個月發布一 次;
- OpenJDK 是一個參考模型並且是完全開源的,而Oracle JDK是 OpenJDK的一個實現,並不是完全開源的;
- Oracle JDK 比 OpenJDK 更穩定。OpenJDK和Oracle JDK的代碼幾乎 相同,但Oracle JDK有更多的類和一些錯誤修復。因此,如果您想開發 企業/商業軟件,我建議您選擇Oracle JDK,因為它經過了徹底的測試和 穩定。某些情況下,有些人提到在使用OpenJDK 可能會遇到了許多應 用程序崩潰的問題,但是,只需切換到Oracle JDK就可以解決問題;
- 頂級公司正在使用Oracle JDK,例如Android Studio,Minecraft和 IntelliJ IDEA開發工具,其中Open JDK不太受歡迎;
- 在響應性和JVM性能方面,Oracle JDK與OpenJDK相比提供了更好的 性能;
- Oracle JDK不會為即將發布的版本提供長期支持,用戶每次都必須通過 更新到最新版本獲得支持來獲取最新版本; 7. Oracle JDK根據二進制代碼許可協議獲得許可,而OpenJDK根據GPL v2許可獲得許可。
