<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          知乎高贊:從源碼層,拆解OracleJDK和OpenJDK有什么區(qū)別?網(wǎng)友:不愧是大神的回答~

          共 1839字,需瀏覽 4分鐘

           ·

          2021-08-10 02:33

          程序員的成長之路
          互聯(lián)網(wǎng)/程序員/技術/資料共享 
          關注


          閱讀本文大概需要 2.8 分鐘。

          來自:https://www.zhihu.com/question/19882320

          借用知乎大神RednaxelaFX的文章分享下這個問題


          Oracle JDK與OpenJDK里的JVM都是HotSpot VM。從源碼層面說,兩者基本上是同一個東西。

          從JDK7開始,Oracle JDK里的HotSpot VM,在研發(fā)的時候其實就是用放在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的內部實現(xiàn),以及還有沒有公開到OpenJDK的其它平臺的port,例如Oracle自己的ARM、PPC版HotSpot VM。

          JDK6的代碼,由于歷史原因,Sun JDK6跟OpenJDK6的代碼并不同步。但是其中的HotSpot VM仍然是相對一致的。OpenJDK 6里的HotSpot VM只缺了一個Oracle JDK里才有的優(yōu)化,那就是-XX:+UseCompressedString。這個功能實現(xiàn)得不太好,沒帶進JDK7/OpenJDK7,所以這點差異沒有也罷。

          另外,Sun JDK6跟OpenJDK6在切代碼的時候不一定是在同一天,所以同一個大版本號(例如HotSpot 20.0)里面的內容可能會稍微有點不一樣。例子之一就是Oracle/Sun JDK6u25里有完整的tiered compilation系統(tǒng)的實現(xiàn),而OpenJDK6對應的HotSpot 20.0卻沒包含這個實現(xiàn);同一時間的OpenJDK7分支里的HotSpot VM又有這個功能,說明這個功能本身并不是啥私有功能,只是OpenJDK6切代碼的時間有可能比Oracle/Sun JDK6u25早了點。

          OpenJDK原是SunMicrosystems公司為Java平臺構建的Java開發(fā)環(huán)境(JDK)的開源版本,完全自由,開放源碼。Sun Microsystems公司在2006年的JavaOne大會上稱將對Java開放源代碼,于2009年4月15日正式發(fā)布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只發(fā)布二進制安裝包,而OpenJDK只發(fā)布源碼。
          <END>

          推薦閱讀:

          程序員缺乏經驗的 7 種表現(xiàn)!

          分布式定時任務框架選型,寫得太好了!

          最近面試BAT,整理一份面試資料《Java面試BATJ通關手冊》,覆蓋了Java核心技術、JVM、Java并發(fā)、SSM、微服務、數(shù)據(jù)庫、數(shù)據(jù)結構等等。

          獲取方式:點個「在看」,點擊上方小卡片,進入公眾號后回復「面試題」領取,更多內容陸續(xù)奉上。

          朕已閱 

          瀏覽 45
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品国产91久久久无码 | 影音先锋 自拍 | 久操21| cao在线视频 | 另类av在线 |