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