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