OpenJDK源码阅读导航
怕放草稿箱里过会儿又坑掉了,总之先发出来再说…回头再慢慢补充内容。
先把ItEye网站上的信息聚合起来。
近期提问帖:
阅读openjdk源代码
如何来看OpenJDK源码
如何分析OpenJDK中JVM的实现
一个个回复太麻烦了,合在一块儿写这么一篇。
================
前言
新浪微群“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的其它发行版
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
经验帖:
在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的源码
简记java launcher与HotSpot VM对VM参数的处理
请教一个share/vm/oops下的代码做fast subtype check的问题
[请教]hotspot的模板解释方法时如何将方法的指令串起来
HotSpot没实现Megamorphic inline caching?
关于OpenJDK1.7的javac源码中JavaCompiler类的一点疑问
===========
结合论文来阅读源码
必读资料
HotSpot Internals for OpenJDK
(该wiki迁移到了OpenJDK官网上。老的https://wikis.oracle.com/display/HotSpotInternals/Home已经改为只读模式)
===========
邮件列表
在OpenJDK官网左边栏上面的Mailing Lists