转-OpenJDK源码阅读导航跟编译
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
转-OpenJDK源码阅读导航跟编译的更多相关文章
- openjdk源码阅读导航
转自:http://rednaxelafx.iteye.com/blog/1549577 这是链接帖.主体内容都在各链接中. 怕放草稿箱里过会儿又坑掉了,总之先发出来再说…回头再慢慢补充内容. 先把I ...
- OpenJDK源码研究笔记(十三):Javac编译过程中的上下文容器(Context)、单例(Singleton)和延迟创建(LazyCreation)3种模式
在阅读Javac源码的过程中,发现一个上下文对象Context. 这个对象用来确保一次编译过程中的用到的类都只有一个实例,即实现我们经常提到的"单例模式". 今天,特意对这个上下文 ...
- openjdk源码阅读
http://rednaxelafx.iteye.com/blog/1549577 http://blog.csdn.net/fancyerii/article/details/7007503 ├—a ...
- OpenJDK 源码阅读之 LinkedList
概要 类继承关系 java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java ...
- 走进JVM之一 自己编译openjdk源码
想要深入了解JVM,就必须了解其实现机制.了解JVM实现的最好方法便是自己动手编译JDK.好了,让我们开始吧! 1. 准备工作 获取OpenJDK源码 本次编译选择的是OpenJDK7u,官方源码包 ...
- 第一篇: openJDK源码编译安装--mac版本
1.为什么要编译JDK 想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译一套JDK,通过阅读和跟踪调试JDK源码去了解Java技术体系的原理,虽然门槛高一点,但肯定比阅读各种书籍,文章,博客 ...
- kubernetes源码阅读及编译
kubernetes源码阅读 工欲善其事,必先利其器.在阅读kubernetes源码时,我也先后使用过多个IDE,最终还是停留在IDEA上. 我惯用的是pycharm(IDEA的python IDE版 ...
- 编译spark源码及塔建源码阅读环境
编译spark源码及塔建源码阅读环境 (一),编译spark源码 1,更换maven的下载镜像: <mirrors> <!-- 阿里云仓库 --> <mirror> ...
- OpenJDK源码研究笔记(十一):浅析Javac编译过程中的抽象语法树(IfElse,While,Switch等语句的抽象和封装)
浅析OpenJDK源码编译器Javac的语法树包com.sun.source.tree. 抽象语法树,是编译原理中的经典问题,有点难,本文只是随便写写. 0.赋值语句 public interface ...
随机推荐
- sql学习资料
http://blog.sina.com.cn/s/articlelist_1594135432_9_1.html
- litepal的jar包
转自http://blog.csdn.net/luohai859/article/details/39292607 LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的 ...
- POJ 2887 Big String (块状数组)
题意:给一个字符串(<=1000000)和n个操作(<2000),每个操作可以在某个位置插入一个字符,或者查询该位置的字符.问查询结果. 思路:块状数组. 如果将原来的字符串都存在一起,每 ...
- STM32下载显示target dll has been cancelled
使用MDK 4.74向STM32下载时出现各种错误,而且时隐时现, Internal command error.Error:Flash download failed. Target DLL has ...
- 首席技术官 (CTO) 比普通程序员强在哪
互联网的蓬勃发展,让无数的程序员身价水涨船高,都变成了「香饽饽」,更有了不少「创业」,「当上 CTO,迎娶白富美的传说」.都说不想当元帅的士兵不是好士兵,我觉得这件事见仁见智,但提升自己的价值,让自己 ...
- C#导入EXCEL数据
public static void InputUserFromExcel(string filePath) { string FileExName = filePath.Substring(file ...
- 使用树莓派和kali Linux打造便携式渗透套件
在DIY前你需要: .树莓派Raspberry Pi Model B+型 或者 树莓派2代; .充电宝 X1; .USB WIFI网卡 X1; .8G SD卡 X1; .Raspberry PI触摸显 ...
- Inno Setup 打包工具总结
Inno Setup 打包工具总结 分类: Install Setup 2013-02-02 15:44 2386人阅读 评论(0) 收藏 举报 最近打包用到了Inno setup,在这个过程中容易犯 ...
- 转:【More Effective C#】Lambda表达式优化
http://www.cnblogs.com/kongyiyun/archive/2010/10/19/1855274.html 使用Lambda表达式将会造成Lambda表达式主题部分的代码重复. ...
- mysql [ERROR] Can't create IP socket: Permission denied
/*************************************************************************** * mysql [ERROR] Can't c ...