導航:首頁 > 源碼編譯 > openjdk源碼

openjdk源碼

發布時間:2022-01-28 18:16:09

Ⅰ openJDK 編譯的jar包和oracleJDK編譯的能通用嗎

在此,Oracle與OpenJDK之間的區別
他是從組織、開源、市場等角度比較的,我這里主要從開源、前景、相關源碼底層…等等角度分析,有興趣的朋友可以一起來建議,學習

一、前景
這里我只能拋出幾個疑問點,歡迎大家一起來解決,拋出疑問

1、為什麼 Docker 容器的java環境,幾乎都是 openJdk ?

2、其實ORACLE jdk是開放了大部分源碼的,openJDK是開放所有源碼的,迄今我所想看到的實現,在Oracle JDK中都是開放源碼的,Oracle JDK沒有開放的部分在哪裡?
答:已解決,Oracle JDK 沒有開放的源碼,在openJDK中的實現,這里先說明一下,OracleJDK只開放了不到7%,後面我會摘錄部分,只是部分哈,有興趣可以安裝一個OpenJDK比較一下區別

3、為什麼 OpenJDK開源了 OracleJDK不想開源的東西,

二、開源
open-source,開源,這是一種共享,集智的概念

openJDK 是對外開放源碼的,Oracle JDK則沒有(部分開源)

三、相關底層架構,實現比較
這里就windows版本分析

3.1-1、Oracle JDK架構1
安裝包就一個,如圖,官網地址
在這里插入圖片描述

3.1-2、Open JDK架構1
鏈接地址,在此
如下圖
在這里插入圖片描述
這里比較出 openJDK的JRE和JDK是分開放的

3.2 Oracle JDK 與 Open JDK 目錄結構比較
在這里插入圖片描述

這里看得出 Oracle JDK 是基於 SDK(Jar)進行版本的維護的,部分提供了源碼集
OpenJDK 是基於 package 進行版本維護,提供了所有的源碼集,目錄更清晰,部分實現還變更於與Oracle JDK 不同的包下,後面我摘出部分事例參考

還要注意 IntelliJ IDEA 中也集成了部分的 SDK,注意開發時確保正確的開發環境

3.3 JVM
openJDK已經不顯示 JVM了

在這里插入圖片描述

3.4 不同的命令行操作
在這里插入圖片描述

四、常用對象的不同的實現(OracleJDK源碼在OpenJDK中的不同實現)
摘錄部分,常用對象,這里總結會有點亂(我還沒仔細地觀察真正的源碼區別)

4.1、Object
在這里插入圖片描述

4.2、ArrayLi

Ⅱ openjdk怎麼看javac源碼

下載源碼,下好了後,只需要解壓下載包下的一個子目錄:/jdk/src/share/classes/,解壓的路徑記好了,如:/home/simon/Develop/openjdk-src,然後打開Eclipse,選中 windows--preference--installed jres--選中jre6(你的可能是其他版本)--edit--選中rt.jar--source attachment--external folders,這里復制剛剛我們源碼的解壓目錄進入,確定。

Ⅲ 如何交叉編譯openjdk 使之能在arm-Linux中運行

直接下載OpenJDK8源碼肯定不通過。有一個專門的移植工程:

hg clone http://hg.openjdk.java.net/aarch64-port/jdk8/

hg clone http://hg.openjdk.java.net/aarch64-port/jdk8u/


這個有時無法下載,使用:

https://github.com/AdoptOpenJDK/openjdk-aarch64-jdk8u

關於OpenJDK的編譯,這個博客記錄最為詳細,所有問題都有解決辦法:

網頁鏈接

Ⅳ 怎麼搭建openjdk源碼環境

環境構建需要的工具
1.cygwin 工具。這個工具的主要用處是為了在window平台上模擬出一個unix虛擬環境。
為了能夠在window下編譯openJDK,我們需要手動安裝的工具如下:
Devel:binutils,make.
Interpreters:m4
Utils:cpio,awk,file(我在安裝的過程中,沒找到awk包和file包,可能是版本的問題。)
Archive:zip,unzip
System:procps
以上提供的鍵值對說明:(前面是文件名:包名)
2.安裝編譯器,我選用的編譯器是VS2010,因為這個編譯器中包好了windows SDK v7.0a,否則還要自己去下載這個SDK
(cygwin和vs2010安裝後都會在操作系統的path環境變數中加入自己的bin目錄路徑,必須保證VS2010的bin目錄在 cygwin的bin目錄之前,因為這兩個軟體的bin目錄中各自都有一個連接器「link.exe」,但是只有VS2010中的連接器可以完成 openJDK的編譯)
3.下載一個已經編譯好的JDK。
4.最後一步就是下載一個Apache ANT,JDK中的java代碼部分都是使用ANT腳本進行編譯的,ANT版本要求在1.6.5以上。
5.准備依賴項。
由於OpenJDK中的源碼沒有100%開源,但是在編譯JDK的時候,我們又需要這部分閉源包,官方稱為「JDK plug」。這部分閉源包可以從Source Releases頁面下載。在windows平台下,其是以jar包的形式存在的。通過下面的命令就可以安裝
java -jar jdk-7-ea-plug-b121-windows-i586-09_dec_1010.jar
運行後就會出現提示框,點擊accept接受協議,然後安裝到指定目錄即可。
安裝完成後建立一個環境變數「ALT_BINARY_PLUGS-PATH」,變數值為安裝的JDK plug的安裝路徑,後面編譯的時候需要它
6.安裝一個大於2.3版本的FreeType,這是一個免費的字體渲染庫。JDK的Swing部分和JConsole這類工具要使用到它。安裝好後建立兩個環境變數「ALT_FREETYPE_LIB_PATH」和「ALT_FREETYPE_HEADERS_PATH」,分別指向FreeType安裝目錄下的bin目錄和include目錄。另外還有一點官方文檔沒有提到但必須要做的事情是把FreeType的bin目錄加入到PATH環境變數中。
7.下載Microsoft DirectX 9.0 SDK(Summer 2004),安裝後大約有298MB,在微軟官方網站上搜索一下就可以找到下載地址,它是免費的。安裝後建立環境變數「ALT_DXSDK_PATH」指向DirectX 9.0 SDK的安裝目錄
8.去尋找一個名為「MSVCR100.DLL」的動態鏈接庫,如果讀者在前面安裝了全套的Visual Studio 2010,那這個文件在本機就能找到,否則上網搜索一下也能找到單獨的下載地址,大概有744KB。建立環境變數「ALT_MSVCRNN_DLL_PATH」指向這個文件所在的目錄。如果讀者選擇的是VS2003,這個文件名應當為「MSVCR73.DLL」,應該在很多軟體中都包含有這個文件,如果找不到的話,前面下載的「Bootstrap JDK」的bin目錄中應該也有一個,直接拿來用吧。
以上這些,基本的工具就准備完成了,看到這里是不是想吐血了呢!就一台筆記本,為了方便就在window下編譯了。有條件的可以直接在Linux筆記本上編譯OpenJDK,這樣會省去好多麻煩。

Ⅳ 如何添加openjdk源文件到eclipse

Window->Perference->Java->Build Path->ClassPathVariable,可以看到JRE_SRC變數是空的,
而且標明了不可更改。其實JDK源碼在安裝的時候已經放在了jdk所在的目錄下,只是eclipse使用
了不帶有源碼的jre,導致沒找到對應的源碼,點擊 Window->Perference->Java->Installed JREs->Search,
找到JDK所在的目錄,然後點OK使用這個JRE,這下子應該就有源碼了。

Ⅵ OpenJDK和OracleJDK的JVM性能有多大差距

首先要先明確OpenJDK和Sun/OracleJDK之間,以及OpenJDK 6、OpenJDK 7、OpenJDK 7u和OpenJDK 8等項目之間是什麼關系,這有助於確定接下來編譯要使用的JDK版本和源碼分支。


前面介紹的Java發展史中我們了解到OpenJDK是Sun在2006年末把Java開源而形成的項目,這里的「開源」是通常意義上的源碼開放形式,即

源碼是可被復用的,例如IcedTea、UltraViolet都是從OpenJDK源碼衍生出的發行版。但如果僅從「開源」字面意義(開放可閱讀的源
碼)上看,其實Sun自JDK 1.5之後就開始以Java Research
License(JRL)的形式公布過Java源碼,主要用於研究人員閱讀(JRL許可證的開放源碼至JDK 1.6 Update
23為止)。把這些JRL許可證形式的Sun/OracleJDK源碼和對應版本的OpenJDK源碼進行比較,發現除了文件頭的版權注釋之外,其餘代碼基本上都是相同的,只有字體渲染部分存在一點差異,Oracle
JDK採用了商業實現,而OpenJDK使用的是開源的FreeType。當然,「相同」是建立在兩者共有的組件基礎上的,Oracle
JDK中還會存在一些Open JDK沒有的、商用閉源的功能,例如從JRockit移植改造而來的Java Flight
Recorder。預計以後JRockit的MissionControl移植到HotSpot之後,也會以Oracle JDK專有、閉源的形式提供。

Oracle
的項目發布經理Joe Darcy在OSCON 2011上對兩者關系的介紹也證實了OpenJDK 7和Oracle JDK
7在程序上是非常接近的,兩者共用了大量相同的代碼(如下圖,注意圖中提示了兩者共同代碼的佔比要遠高於圖形上看到的比例),所以我們編譯的
OpenJDK,基本上可以認為性能、功能和執行邏輯上都和官方的Oracle JDK是一致的。

Ⅶ openjdk和jdk的區別

使用過LINUX的人都應該知道,在大多數LINUX發行版本里,內置或者通過軟體源安裝JDK的話,都是安裝的openjdk,那麼到底什麼是openjdk,它與sun jdk有什麼關系和區別呢?
歷史上的原因是,openjdk是jdk的開放原始碼版本,以GPL協議的形式放出。在JDK7的時候,openjdk已經成為jdk7的主幹開發,sun jdk7是在openjdk7的基礎上發布的,其大部分原始碼都相同,只有少部分原始碼被替換掉。使用JRL(JavaResearch License,Java研究授權協議)發布。
至於openjdk6則更是有其復雜的一面,首先是openjdk6是jdk7的一個分支,並且盡量去除Java SE7的新特性,使其盡量的符合Java6的標准。
關於JDK和OpenJDK的區別,可以歸納為以下幾點:
授權協議的不同:
openjdk採用GPL V2協議放出,而JDK則採用JRL放出。兩者協議雖然都是開放源代碼的,但是在使用上的不同在於GPL V2允許在商業上使用,而JRL只允許個人研究使用。
OpenJDK不包含Deployment(部署)功能:
部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,這些功能在Openjdk中是找不到的。
OpenJDK源代碼不完整:
這個很容易想到,在採用GPL協議的Openjdk中,sun jdk的一部分源代碼因為產權的問題無法開放openjdk使用,其中最主要的部份就是JMX中的可選元件SNMP部份的代碼。因此這些不能開放的源代碼將它作成plug,以供OpenJDK編譯時使用,你也可以選擇不要使用plug。而Icedtea則為這些不完整的部分開發了相同功能的源代碼(OpenJDK6),促使OpenJDK更加完整。
部分源代碼用開源代碼替換:
由於產權的問題,很多產權不是SUN的源代碼被替換成一些功能相同的開源代碼,比如說字體柵格化引擎,使用Free Type代替。
openjdk只包含最精簡的JDK:
OpenJDK不包含其他的軟體包,比如Rhino Java DB JAXP……,並且可以分離的軟體包也都是盡量的分離,但是這大多數都是自由軟體,你可以自己下載加入。
不能使用Java商標:
這個很容易理解,在安裝openjdk的機器上,輸入「java -version」顯示的是openjdk,但是如果是使用Icedtea補丁的openjdk,顯示的是java。(未驗證)
總之,在Java體系中,還是有很多不自由的成分,源代碼的開發不夠徹底,希望Oracle能夠讓JCP更自由開放一些,這也是所有Java社區所希望的。

Ⅷ openjdk是什麼

OpenJDK 是 Sun 公司為著名的 Java 平台構建的 Java 開發環境的開源版本,完全自由,開放源碼。Sun 公司在 2006 年的 JavaOne 大會上稱將對 Java 開放源代碼,於2009年4月15日正式發布 OpenJDK。

Ⅸ openjdk和oracle jdk的區別

openjdk採用GPL V2協議,oracle jdk採用JRL協議。兩者協議都是開放源代碼的,但是在使用上的不同在於GPL V2允許在商業上使用,而JRL只允許個人研究使用
因為協議不同, 所以 openjdk 是不完整的, 部分早期的源碼因為版權歸屬於 sun, 而 sun 又被 oracle 收購了, 所以這部分的源碼在 openjdk 中被開源的其他實現給替換掉了

Ⅹ 最新的JDK和openJDK有什麼區別

OpenJDK不包含Deployment(部署)功能:
部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,這些功能在Openjdk中是找不到的。
OpenJDK源代碼不完整:
這個很容易想到,在採用GPL協議的Openjdk中,sun jdk的一部分源代碼因為產權的問題無法開放openjdk使用,其中最主要的部份就是JMX中的可選元件SNMP部份的代碼。因此這些不能開放的源代碼將它作成plug,以供OpenJDK編譯時使用,你也可以選擇不要使用plug。而Icedtea則為這些不完整的部分開發了相同功能的源代碼(OpenJDK6),促使OpenJDK更加完整。
部分源代碼用開源代碼替換:
由於產權的問題,很多產權不是SUN的源代碼被替換成一些功能相同的開源代碼,比如說字體柵格化引擎,使用Free Type代替。
openjdk只包含最精簡的JDK:
OpenJDK不包含其他的軟體包,比如Rhino Java DB JAXP……,並且可以分離的軟體包也都是盡量的分離,但是這大多數都是自由軟體,你可以自己下載加入。

閱讀全文

與openjdk源碼相關的資料

熱點內容
android圖片變灰 瀏覽:268
linuxvi下一個 瀏覽:975
安卓手機的應用鎖怎麼解 瀏覽:735
linux增加路徑 瀏覽:849
sql身份證號最後四位加密 瀏覽:533
xp系統表格加密 瀏覽:856
光遇安卓軍大衣什麼時候上線 瀏覽:840
android應用商店圖標 瀏覽:341
java計算圓的面積 瀏覽:643
應用編譯優化recovery 瀏覽:577
域控命令n 瀏覽:258
php導出文件 瀏覽:15
谷歌地圖網頁版無法連接伺服器地址 瀏覽:298
菜鳥工具在線編譯python 瀏覽:858
柵格化命令有何作用 瀏覽:825
為什麼壓縮文件不能解壓 瀏覽:311
足球app哪個軟體好 瀏覽:96
產品經理逼瘋程序員的一天 瀏覽:17
修改svn伺服器ip地址 瀏覽:584
下列關於編譯說法正確的是 瀏覽:246