1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        OracleJDK 和 OpenJDK 有什么區(qū)別?來看看大神的回答!

        共 1740字,需瀏覽 4分鐘

         ·

        2021-09-25 21:24

        關(guān)注Java核心技術(shù),推送更多 Java 干貨!f3fa0f9e3dde5213d35f38a2d3ba244a.webp

        來源:zhihu.com/question/19882320

        8c6810f8520ac1b5520e0cbed7642b34.webp

        借用知乎大神RednaxelaFX的文章分享下這個(gè)問題:

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

        從JDK7開始,Oracle JDK里的HotSpot VM,在研發(fā)的時(shí)候其實(shí)就是用放在OpenJDK的Mercurial代碼庫。也就是說跟大家從外部能實(shí)時(shí)看到的OpenJDK用的是同一個(gè)代碼庫。

        HotSpot VM只有非常非常少量的功能沒有在OpenJDK里,那部分在Oracle內(nèi)部的代碼庫里。這些私有部分都不涉及JVM的核心功能。

        所以當(dāng)一個(gè)Oracle員工要構(gòu)建OpenJDK時(shí),他要做的事情跟外面的人一樣:從http://hg.openjdk.java.net簽出代碼,構(gòu)建。

        而當(dāng)他要構(gòu)建Oracle JDK時(shí),他同樣需要先從http://hg.openjdk.java.net簽出OpenJDK,然后從Oracle內(nèi)部的代碼庫簽出私有的部分,放在OpenJDK代碼下的一個(gè)特定目錄里,然后構(gòu)建。

        這些HotSpot VM私有的部分主要是Java Flight Recorder的內(nèi)部實(shí)現(xiàn),以及還有沒有公開到OpenJDK的其它平臺的port,例如Oracle自己的ARM、PPC版HotSpot VM。

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

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

        OpenJDK原是SunMicrosystems公司為Java平臺構(gòu)建的Java開發(fā)環(huán)境(JDK)的開源版本,完全自由,開放源碼。Sun Microsystems公司在2006年的JavaOne大會上稱將對Java開放源代碼,于2009年4月15日正式發(fā)布OpenJDK。甲骨文在2010 年收購SunMicrosystem之后接管了這個(gè)項(xiàng)目。

        Oracle/Sun JDK里面包含的JVM是HotSpotVM,HotSpot VM只有非常非常少量的功能沒有在OpenJDK里,那部分在Oracle內(nèi)部的代碼庫里。這些私有部分都不涉及JVM的核心功能。所以說,Oracle/Sun JDK與OpenJDK其實(shí)使用的是同一個(gè)代碼庫。

        從一個(gè)Oracle內(nèi)部員工的角度來看,當(dāng)他要構(gòu)建OracleJDK時(shí),他同樣需要先從http://hg.openjdk.java.net簽出OpenJDK,然后從Oracle內(nèi)部的代碼庫簽出私有的部分,放在OpenJDK代碼下的一個(gè)特定目錄里,然后構(gòu)建。

        值得注意的是,Oracle JDK只發(fā)布二進(jìn)制安裝包,而OpenJDK只發(fā)布源碼。

        最近好文分享1. 最新 Java 面試題出爐?。◣看鸢福?/a>

        
         

        2. 重磅!Oracle 宣布從 JDK 17 開始正式免費(fèi)。。3. Java 調(diào)用第三方接口,實(shí)戰(zhàn)來了!4. 用好這個(gè)IDEA插件,寫代碼效率至少提升5倍!

        5. 手寫一個(gè)迷你版 HashMap,面試隨便問!

        更多請關(guān)注 Java核心技術(shù)

        一個(gè)分享Java核心技術(shù)干貨的公眾號

        點(diǎn)擊閱讀原文獲取面試題~
        瀏覽 46
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            羞羞影院男女午夜爽爽在线 | 免费观看成人A片 | 私人玩物爆乳 | 91麻豆天美传媒在线观看 | 男人女人真曰批视频播放在线 | 黄色av操逼 | 中国老太卖婬HD大全免费看 | 日韩国产欧美在线观看 | 黄色电影在线观看网站 | 中国一级片在线播放 |