OpenJDK源码阅读导航
这是链接帖。主体内容都在各链接中。
怕放草稿箱里过会儿又坑掉了,总之先发出来再说…回头再慢慢补充内容。
先把ItEye网站上的信息聚合起来。
近期提问帖:
如何来看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 -> ... |JDK 5 |\ | JDK 5 update -> ... |JDK 6 |\ | JDK 6 update -> ......
类似这样。当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 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的源码结构
请教一个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
===========
邮件列表
在OpenJDK官网左边栏上面的Mailing Lists
=========== 1 楼 sohuexe 2012-06-19 很久不见博主更新了啊!? 2 楼 hello1kitty 2012-06-25 同样,博主您去哪儿了啊,好久没更新了啊,呜呜呜呜呜~