來源:zhihu.com/question/19882320

借用知乎大神RednaxelaFX的文章分享下這個問題:
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,所以這點差異沒有也罷,
另外,Sun JDK6跟OpenJDK6在切代碼的時候不一定是在同一天,所以同一個大版本號(例如HotSpot 20.0)里面的內容可能會稍微有點不一樣,例子之一就是Oracle/Sun JDK6u25里有完整的tiered compilation系統的實作,而OpenJDK6對應的HotSpot 20.0卻沒包含這個實作;同一時間的OpenJDK7分支里的HotSpot VM又有這個功能,說明這個功能本身并不是啥私有功能,只是OpenJDK6切代碼的時間有可能比Oracle/Sun JDK6u25早了點,
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內部員工的角度來看,當他要構建OracleJDK時,他同樣需要先從http://hg.openjdk.java.net簽出OpenJDK,然后從Oracle內部的代碼庫簽出私有的部分,放在OpenJDK代碼下的一個特定目錄里,然后構建,
值得注意的是,Oracle JDK只發布二進制安裝包,而OpenJDK只發布原始碼,
近期熱文推薦:
1.1,000+ 道 Java面試題及答案整理(2021最新版)
2.別在再滿屏的 if/ else 了,試試策略模式,真香!!
3.臥槽!Java 中的 xx ≠ null 是什么新語法?
4.Spring Boot 2.5 重磅發布,黑暗模式太炸了!
5.《Java開發手冊(嵩山版)》最新發布,速速下載!
覺得不錯,別忘了隨手點贊+轉發哦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/303153.html
標籤:Java
