轉自:http://rednaxelafx.iteye.com/blog/1549577
這是鏈接帖。主體內容都在各鏈接中。
怕放草稿箱里過會兒又坑掉了,總之先發出來再說…回頭再慢慢補充內容。
先把ItEye網站上的信息聚合起來。
近期提問帖:
閱讀openjdk源代碼
如何來看OpenJDK源碼
如何分析OpenJDK中JVM的實現
一個個回復太麻煩了,合在一塊兒寫這么一篇。
================
前言
我的VM帖的索引
高級語言虛擬機(HLLVM)群組
新浪微群“JVM源碼閱讀活動”
如何構建javac的調試環境
為什么有時候調試代碼的時候看不到變量的值
自己編譯JDK的src.zip的步驟
Ubuntu下編譯openjdk成為可調試版
有人在Centos5 下build jdk1.6 成功嗎?
ItEye論壇討論帖:
Java IDE 添加 JDK 源代碼關聯
JDK(32bit)的高級安裝——Client模式與Server模式
===========================
OpenJDK概況
http://openjdk.java.net
OpenJDK歷史
曾任OpenJDK 6項目發布經理一職的Joe Darcy在OSCON 2011上講解了JDK與OpenJDK的歷史與現狀。下面引用他的演示稿中的幾幅圖。
OpenJDK的歷史與版本系譜:
Joe在他更早的一篇博文里詳細描述過OpenJDK(特別是OpenJDK 6)的系譜。同一段文字也發布在OpenJDK的JDK 6項目主頁面。
Red Hat的Deepak Bhole則從項目的開源性角度寫了另一篇講述OpenJDK項目歷史的博文。
綜合上述資料及其它來源的一些信息可知:
Sun JDK有“發布列車”(release train)的概念。例如說,在JDK 6還在早期開發階段,連首個版本都尚未發布時,JDK 6就是最新的開發分支,而同時也存在着JDK 1.4.2 update和JDK 5 update兩個老版本的維護分支。開發通常是在最新分支上進行的;當功能或修復在最新分支上穩定下來之后,會backport到老版本的維護分支。
... \ | JDK 1.4.2 update -> ... v JDK 5 |\ | JDK 5 update -> ... v JDK 6 |\ | JDK 6 update -> ... v ...
類似這樣。當Sun決定將JDK開源出來時,JDK 6與JDK 6 update 1都已經正式發布,而JDK 6 update維護分支已經從最新開發分支分離出來一段時間了;此時最新的開發分支是JDK 7。所以很自然的,OpenJDK以JDK 7為基礎演化而來。
開源Java社區歡迎OpenJDK的工作,但JDK 7尚在早期開發階段,不適合實際部署。在社區需求的驅動下,OpenJDK創建了JDK 6的對應版本——OpenJDK 6項目。但這份代碼並不是從JDK 6 update分支開源而來,而是以OpenJDK 7 build 20為基礎,將一些不適合放在JDK 6的代碼去掉之后再打上JDK 6 update分支累積的一些代碼更新而來。然后JDK 6 update、(Open)JDK 7、OpenJDK 6三個分支就分開發展了。這就是上面的系譜圖所展現的情況。
在Oracle完成對Sun的收購后,OpenJDK的開發模型基本維持跟原本Sun時代一致;只在非常最近才開始有新的變化。在JDK 7正式發布、JDK 7 update項目建立后,JDK 8就成為了現在的最新開發分支。
現狀是,Oracle主要也是在OpenJDK上進行主要的功能開發,這部分是以GPLv2 + Classpath Exception許可證完全開源的。同時Oracle也在開發一些商用的、閉源的功能,例如Java Flight Recorder。將這些閉源功能疊加在開源的OpenJDK上打包起來,就是產品版的Oracle JDK 7 / 7 update / 8。
OpenJDK與Oracle JDK
大家都會對這個問題感興趣:OpenJDK與Oracle JDK到底有多像?
說真的我也不知道准確答案。從外部看:
- JDK 6的源碼從最早的JDK 6到JDK 6 update 23都有以JRL許可證發布。但上面的系譜已經說明了,Oracle/Sun JDK 6的源碼跟OpenJDK 6的源碼由於來源路徑的不同,本來就會存在一定的差異,所以並不適合直接用於比較。
- Oracle JDK 7的源碼沒有像JDK 6那樣以JRL許可證發布,外界無法比較它與OpenJDK 7的准確差異。JDK 7 update、JDK 8都是同理。
這種情況下,還是讓我們相信Joe Darcy的說法吧。繼續引用他在OSCON 2011上的演示稿里的圖:
JDK、OpenJDK與HotSpot VM的版本
Oracle/Sun JDK、OpenJDK與HotSpot VM的版本對應關系
OpenJDK的其它發行版
IcedTea
UltraViolet™ Virtual Machine Development Kit
--------------------------
OpenJDK源碼結構
主項目
引用自OpenJDK 8的README
The hotspot directory contains the source code and make files for building the OpenJDK Hotspot Virtual Machine.
The langtools directory contains the source code and make files for building the OpenJDK javac and language tools.
The corba directory contains the source code and make files for building the OpenJDK Corba files.
The jaxws directory contains the source code and make files for building the OpenJDK JAXWS files.
The jaxp directory contains the source code and make files for building the OpenJDK JAXP files.
The jdk directory contains the source code and make files for building the OpenJDK runtime libraries and misc files.
The top level Makefile is used to build the entire OpenJDK.
----------------------------
編譯OpenJDK
如何通過Mercurial下載OpenJDK的源碼
經驗帖:
在XUbuntu 10.10上以JRL源碼構建Oracle JDK 6 update 23
Oracle已經決定不再以JRL許可證發布JDK 6的源碼,所以上面這篇經驗帖的許多內容變得沒用了。不過這帖里也有寫了OpenJDK的build方法,其實很簡單的(取決於在什么平台上…)。
周志明(IcyFenix)寫的《深入理解Java虛擬機》一書的第一章,1.5小節介紹了在Windows上build出OpenJDK 7的步驟,也值得入門者參考。
淘寶的同事大仁的經驗帖:Ubuntu10.04下build OpenJDK7 的過程
哪位大大編譯過OpenJDK6,請教些問題
最新的OpenJDK 8里有新的build infrastructure,編譯過程可能會有些變化。
===========
真的要讀JVM的源碼么?
第0次JVM源碼閱讀活動討論了“是不是真的要讀JVM源碼,要讀的話讀什么,相關的推薦閱讀”的話題。
具體內容請參考活動的演示稿:為啥別讀HotSpot VM的源碼
特別推薦Maxine VM項目。
最新的一篇綜述報告講解了Maxine VM的目標、高層架構、性能水平等。
reflection. Moreover, modern Java IDEs offer time-saving features such as refactoring, auto-completion, and code navigation. Finally, Java annotations enable compiler extensions for low-level "systems programming" while retaining IDE compatibility. These techniques collectively make complex system software more "approachable" than has been typical in the past.
The Maxine VM, a meta-circular Java VM implementation, has aggressively used these features since its inception. A co-designed companion tool, the Maxine Inspector, offers integrated debugging and visualization of all aspects of the VM's run-time state. The Inspector's implementation exploits advanced Java
language features, embodies intimate knowledge of the VM's design, and even reuses a significant amount of VM code directly. These characteristics make Maxine a highly approachable VM research platform and a productive basis for research and teaching.
Maxine VM的其它相關文獻也都很值得一讀
https://wikis.oracle.com/display/MaxineVM/Publications
===========
閱讀HotSpot VM的源碼
HotSpot VM的源碼結構
簡記java launcher與HotSpot VM對VM參數的處理
請教一個share/vm/oops下的代碼做fast subtype check的問題
HotSpot中這么多的Mutex Locker知多少
[請教]hotspot的模板解釋方法時如何將方法的指令串起來
修改java.lang.String類時出錯?
查看HotSpot VM動態生成的機器碼
HotSpot沒實現Megamorphic inline caching?
關於OpenJDK1.7的javac源碼中JavaCompiler類的一點疑問
請教ad文件的格式
===========
結合論文來閱讀源碼
必讀資料
HotSpot Internals for OpenJDK
(該wiki遷移到了OpenJDK官網上。老的https://wikis.oracle.com/display/HotSpotInternals/Home已經改為只讀模式)
===========
郵件列表
在OpenJDK官網左邊欄上面的Mailing Lists
