openjdkwindows編譯
『壹』 jdk是什麼
JDK全稱java Development ToolKit,是Java語言開發工具包。JDK是整個JAVA的核心,包括了Java運行環境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基礎的類庫(即Java API 包括rt.jar)。
最主流的JDK是Sun公司發布的JDK,除了Sun之外,還有很多公司和組織都開發了屬於自己的JDK。IBM公司開發了屬於自己的JDK,國內淘寶也開發了屬於自己的JDK,各個組織開發自己的JDK都是為了在某些方面得到一些提高,以適應自己的需求。
JDK是用於構建在 Java 平台上發布的應用程序、applet 和組件的開發環境。它不提供具體的開發軟體,它提供的是無論你用何種開發軟體寫Java程序都必須用到的類庫和Java語言規范。
(1)openjdkwindows編譯擴展閱讀:
JDK版本的 變遷史及其選擇。
Java語言自JDK1.0版本以來經歷了許多次更新,也在基本程序庫中增加了大量的類別和包。除了語言上的變化,多年來Java標准庫(JCL)發生了巨大的變化,從JDK 1.0中的幾百個類暴增到J2SE 5中的三千多個類。
Swing、Java2D等的全新API被加入其中,而許多原本JDK 1.0的類和方法已被棄用。當然,仍然有一些程序可以將Java程序從新版本的Java平台轉換為較舊版本(例如Java 5.0降轉到1.4)。
2017年9月,Java平台的主架構師 Mark Reinhold 發出提議,要求將Java的功能更新周期從之前的每兩年一個新版本縮減到每六個月一個新版本。該提議獲得了通過,並在提出後不久生效。
Java 8 與 Java 11 為當前提供支持的LTS(長期支持)版本;Java 10 是上一個快速發布版本,且已不再被支持。2018年9月,隨著 Java 11 的發布,Java 10 自當日起不再被支持。
Oracle 將在 2019 年 1 月前為商業用途中的 Java 8 長期支持,而針對非商用的更新將繼續提供,直至 2020 年 12 月。
此外,AdoptOpenJDK 也為 Java 8 提供免費更新。針對 Java 11 的長期支持將不再由 Oracle 提供,而是改由OpenJDK社區的 AdoptOpenJDK 提供。
版本選擇的問題,1.7、1.8、1.9都是成熟版本,原則上都可以選用。國內公司的商業項目jdk一般不輕易升級,1.9用的就比較少了,加上配套框架升級速度的考慮,1.9版本第二推薦位。
1.8和1.7的應用都比較廣泛了,那自然選更新更高級的版本。所以,最推薦用1.8版本。JDK11除非只想從語言層面去體驗新功能,還是不要在實際業務開發中用。
參考資料來源:網路——JDK
『貳』 怎麼編譯並調試 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目錄中應該也有一個,直接拿來用吧。
『叄』 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