Java / JVM是如何构建的? 采用OpenJDK是您的答案!
簡介與歷史
眾所周知,從Java 7開始,OpenJDK是Java的參考實現(RI)。 下面的時間軸使您對OpenJDK的歷史有了一個了解:
OpenJDK歷史(2006年至今)
有關更多詳細信息,請參見采用OpenJDK –過去,現在和將來 [1] 。
如果您想知道從Oracle,Red Hat等供應商處下載的JDK或JRE二進制文件,則可能是這些線索均來自OpenJDK。 然后,每個供應商都會添加一些由于安全性,專有性或其他原因而尚未開源的額外人工制品。
OpenJDK是由什么制成的?
OpenJDK由許多存儲庫組成,即corba,hotspot,jaxp,jaxws,jdk,langtools和nashorn。 在OpenjJDK8和OpenJDK9之間,沒有引入任何新的存儲庫,而是進行了許多新的更改和重組,這主要歸功于Jigsaw – Java本身的模塊化[ 2 ] [ 3 ] [ 4 ] [ 5 ]。
回購構成,語言細分(估計指標)
多年來,Java語言和平臺是如何構建的?
Java是通過引導Java的較早(先前)版本來構建的,即Java是使用Java本身作為其構建塊來構建的。 將舊的組件放在一起以創(chuàng)建新的組件,該組件在下一階段將成為構建塊。 在Scratch [6 ]的 Scheme甚至在Wikipedia [7]上都可以找到引導的一個很好的例子。
使用JDK7編譯和構建OpenJDK8 [8],類似地,使用JDK8編譯和構建OpenJDK9 [9]。 理論上,可以使用從OpenJDK8創(chuàng)建的映像來編譯OpenJDK8,類似于使用OpenJDK9的OpenJDK9。 使用稱為啟動周期映像的過程–創(chuàng)建OpenJDK的JDK映像,然后使用同一映像,再次編譯OpenJDK,這可以使用make命令選項來完成:
$ make bootcycle-images # Build images twice, second time with newly built JDK
make在OpenJDK8和OpenJDK9下提供了許多選項,您可以通過命名它們來構建單個組件或模塊,即
$ make [component-name] | [module-name]
甚至并行運行多個構建過程,即
$ make JOBS=<n> # Run <n> parallel make jobs
最后使用install選項安裝構建的人工制品,即
$ make install
一些神話破滅了
更具體而言,OpenJDK或Hotspot并不是完全用C / C ++編寫的,代碼庫的很大一部分是好的ole Java(請參見上面的組成圖)。 因此,您不必成為鐵桿開發(fā)人員即可為Open JDK做出貢獻。 甚至底層的C / C ++代碼代碼庫也不令人恐懼或令人生畏。 例如,這是從vm / memory / universe.cpp中提取的代碼片段。
在HotSpotrepo中– http://hg.openjdk.java.net/jdk6/jdk6/hotspot/raw-file/a541ca8fa0e3/src/share/vm/memory/universe.cpp [10]:
(請注意,以上代碼段自此處發(fā)布以來可能已更改)
從上面的代碼塊中可以明顯看出,我們正在研究如何使用預編譯器符號來創(chuàng)建支持某種類型的GC(即串行GC或并行GC)的Hotspot代碼。 同樣,在切換一個或多個GC開關時,在上面的代碼塊中也選擇了GC策略的類型,即,啟用后使用UseAdaptiveSizePolicy選擇“ 異步并發(fā)標記 和掃描”策略。 如果未選擇“使用串行GC”或“使用并發(fā)標記掃描GC”,則選擇的GC策略是“標記并掃描”策略。 所有這些以及更多內容都清晰易讀且冗長,而不僅僅是格式精美的代碼,其讀法像英語。
可以在“ 采用OpenJDK中級和高級體驗 [11]”文檔中名為“深潛熱點”的部分中找到更多評論。
建立您自己的JDK或JRE的步驟
前面我們提到了JDK和JRE映像–這些不再僅對Java世界的大型公司開放,您和我可以很容易地構建此類映像。 該過程的步驟已得到簡化,有關快速入門的信息,請參見《 采用OpenJDK入門工具包》 [12]和《 采用OpenJDK中級和高級體驗》 [11]文檔。 有關相同步驟的詳細版本,請參見“ 采用OpenJDK 主頁” [13]。 基本上,從OpenJDK代碼庫構建JDK映像可歸結為以下命令:
(已簡化了設置步驟,并省略了一些命令,有關詳細步驟,請參見上面的鏈接)
$ hg clone http://hg.openjdk.java.net/jdk8/jdk8 jdk8 (a)...OpenJDK8
要么
$ hg clone http://hg.openjdk.java.net/jdk9/jdk9 jdk9 (a)...OpenJDK9
$ ./get_sources.sh(b)
$ bash配置(c)
$制作清晰的圖像(d)
(已簡化了設置步驟,并省略了一些命令,有關詳細步驟,請參見上面的鏈接)
要解釋以上每個步驟中發(fā)生的情況:
(a)我們像使用git clone一樣克隆openjdk mercurial回購。
(b)完成步驟(a)后,轉到創(chuàng)建的文件夾,然后運行get_sources.sh命令,該命令等效于git fetch或git pull,因為步驟(a)僅降低了基礎文件而不是所有文件和文件夾。
(c)在這里,我們運行一個腳本,該腳本檢查并創(chuàng)建進行編譯和構建過程所需的配置
(d)步驟(c)成功完成后,我們將執(zhí)行完整的編譯,構建并根據構建的工件創(chuàng)建JDK和JRE映像
如您所見,這些是構建偽影或JDK / JRE圖像所遵循的簡單步驟[步驟(a)僅需要運行一次]。
好處
- 促進Java語言和平臺的發(fā)展和改進
- 了解語言和平臺的內部知識
- 在執(zhí)行上述操作的同時,了解OS平臺和其他技術
- 參與F / OSS項目
- 緊跟Java / JVM領域的最新變化
- 可以從專業(yè)上幫助的知識和經驗,但其他來源(例如書籍,培訓,工作經驗,大學課程等)也很難獲得
- 職業(yè)發(fā)展
- 個人發(fā)展(軟技能和人際網絡)
有助于
加入Adopt OpenJDK [14]和Betterrev [15]項目,并通過向我們提供有關Java包括這些項目的所有內容的反饋來做出貢獻。 首先加入“采用討論”郵件列表和其他與OpenJDK相關的郵件列表,它們將使您隨時了解最新進展和對OpenJDK的更改。 分叉您看到的任何項目,并通過拉取請求提交更改。
謝謝和支持
在JCP [21], Openjdk團隊 [22],JUG(例如倫敦Java Community) [16], SouJava [17]和巴西的其他JUG的幫助下, 采用OpenJDK [14]和傘項目得到了支持和進展。歐洲的水罐,例如BGJUG(保加利亞水罐) [18], BeJUG(比利時水罐) [19], 馬其頓水罐 [20],以及許多其他小型水罐。 我們希望在不久的將來有更多的JUG和個人參與其中。 如果您或您的JUG希望參加,請聯系。
翻譯自: https://www.javacodegeeks.com/2014/12/how-is-java-jvm-built-adopt-openjdk-is-your-answer.html
總結
以上是生活随笔為你收集整理的Java / JVM是如何构建的? 采用OpenJDK是您的答案!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英特尔承认微代码更新导致 Win10/1
- 下一篇: 为什么现在是升级到Java 8的最佳时机