转自: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 DarcyOSCON 2011上讲解了JDK与OpenJDK的历史与现状。下面引用他的演示稿中的几幅图。

OpenJDK的历史与版本系谱:

Joe Darcy 写道

Joe在他更早的一篇博文里详细描述过OpenJDK(特别是OpenJDK 6)的系谱。同一段文字也发布在OpenJDK的JDK 6项目主页面

Red Hat的Deepak Bhole则从项目的开源性角度写了另一篇讲述OpenJDK项目历史的博文。

Deepak Bhole 写道

综合上述资料及其它来源的一些信息可知:

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上的演示稿里的图:

Joe Darcy 写道

JDK、OpenJDK与HotSpot VM的版本

Oracle/Sun JDK、OpenJDK与HotSpot VM的版本对应关系

OpenJDK的其它发行版

IcedTea

UltraViolet™ Virtual Machine Development Kit

--------------------------

OpenJDK源码结构

主项目 
引用自OpenJDK 8的README

引用
The source code for the OpenJDK is delivered in a set of directories: hotspot, langtools, corba, jaxws, jaxp, and jdk.

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的目标、高层架构、性能水平等。

引用
A highly productive platform accelerates the production of research results. The design of a virtual machine (VM) written in the Java programming language can be simplified through exploitation of interfaces, type and memory safety, automated memory management (garbage collection), exception handling, and 
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

openjdk源码阅读导航的更多相关文章

  1. 转-OpenJDK源码阅读导航跟编译

    OpenJDK源码阅读导航 OpenJDK源码阅读导航 博客分类: Virtual Machine HotSpot VM Java OpenJDK openjdk 这是链接帖.主体内容都在各链接中.  ...

  2. openjdk源码阅读

    http://rednaxelafx.iteye.com/blog/1549577 http://blog.csdn.net/fancyerii/article/details/7007503 ├—a ...

  3. OpenJDK 源码阅读之 LinkedList

    概要 类继承关系 java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList<E> java ...

  4. java8 ArrayList源码阅读

    转载自 java8 ArrayList源码阅读 本文基于jdk1.8 JavaCollection库中有三类:List,Queue,Set 其中List,有三个子实现类:ArrayList,Vecto ...

  5. openJDK之如何下载各个版本的openJDK源码

    如果我们需要阅读openJDK的源码,那么需要下载,那么该去哪下载呢? 现在JDK已经发展到版本10了,11已经处于计划中,如果需要特定版本的openJDK,它们的下载链接在哪呢? 1.openJDK ...

  6. 走进JVM之一 自己编译openjdk源码

    想要深入了解JVM,就必须了解其实现机制.了解JVM实现的最好方法便是自己动手编译JDK.好了,让我们开始吧! 1.  准备工作 获取OpenJDK源码 本次编译选择的是OpenJDK7u,官方源码包 ...

  7. ThreadPoolExecutor 源码阅读

    目录 ThreadPoolExecutor 源码阅读 Executor 框架 Executor ExecutorService AbstractExecutorService 构造器 状态 Worke ...

  8. [置顶] OpenJDK源码研究笔记(九)-可恨却又可亲的的异常(NullPointerException)

    可恨的异常 程序开发过程中,最讨厌异常了. 异常代表着程序出了问题,一旦出现,控制台会出现一屏又一屏的堆栈错误信息. 看着就让人心烦. 对于一个新人来讲,遇到异常经常会压力大,手忙脚乱,心生畏惧. 可 ...

  9. OpenJDK源码研究笔记(五)-缓存Integer等类型的频繁使用的数据和对象,大幅度提升性能(一道经典的Java笔试题)

    摘要 本文先给出一个看似很简单实则有深意的Java笔试面试题,引出JDK内部的缓存. JDK内部的缓存,主要是为了提高Java程序的性能. 你能答对这道"看似简单,实则有深意"的J ...

随机推荐

  1. shell编程小结

    因为项目中要用到shell脚本,所以系统的看了一下.以前只是泛泛的了解. 变量:环境变量.预定义变量.位置变量.自定义变量. 环境变量这个好说,通过set或者env命令都能看到相应的列表,然后可以通过 ...

  2. VS下关于 _CRT_SECURE_NO_WARNINGS 问题的分析与解决

    一.问题的起因 六月下旬,老师布置了有关图形学的课设,于是我将我在VS2013中写好的代码进行编译,结果得到了以下信息: 二.解决方法 1,按照英文提示,我先将fopen改成了fopen_s后,发现错 ...

  3. 域名映射ip

    windows: 修改文件hosts文件 地址是C:\WINDOWS\system32\drivers\etc\hosts 加进你自己的如: Linux: hosts 文件目录: sudo vi /e ...

  4. ubuntu -- 系统目录结构

    1./:目录属于根目录,是所有目录的绝对路径的起始点,Ubuntu 中的所有文件和目录都在跟目录下. 2./etc:此目录非常重要,绝大多数系统和相关服务的配置文件都保存在这里,这个目录的内容一般只能 ...

  5. Python——eventlet.greenthread

    该模块实现 eventlet 中的 “绿色线程” 即协程. 相关的 greenlet 模块的介绍. 目录 一.模块级函数 sleep() spawn() 模块级函数 eventlet.greenthr ...

  6. (弃)解读Openstack Identity API v2.0

    目前OpenStack社区提供了详尽的API文档,并配有丰富的说明和示例,关于Identity API v2查看这里, 关于Identity API v3请查看这里. 尽管现在官方已经不建议OpenS ...

  7. XAudio2学习之调节音调

    频率比有两个地方能够设置.一个是在创建IXAudio2SourceVoice对象的时候.一个是调用IXAudio2SourceVoice::SetFrequencyRatio来调节. 在创建IXAud ...

  8. Linux入门基础教程之Linux下软件安装

    Linux入门基础教程之Linux下软件安装 一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc AP ...

  9. [mysql] linux下使用yum安装mysql

    From: http://www.2cto.com/database/201207/141878.html linux下使用yum安装mysql   1.安装 查看有没有安装过:           ...

  10. OpenGL 遮挡查询

    原文地址:http://www.linuxidc.com/Linux/2015-02/114036.htm 在一个场景中,如果有有些物体被其他物体遮住了不可见.那么我们就不需要绘制它.在复杂的场景中, ...