`
1025250620
  • 浏览: 230472 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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 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 -> ...
 |
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。 


OpenJDKOracle 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 

经验帖: 
在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 

=========== 

邮件列表 

OpenJDK官网左边栏上面的Mailing Lists 

分享到:
评论

相关推荐

    Java源代码下载和Myeclipse上安装教程

    通过熟练使用这些功能,你可以在阅读源代码时更高效地理解Java的运行机制,提升编程技能。 总之,下载Java源代码并将其配置到MyEclipse中,是深入学习Java和提升编程能力的重要步骤。通过这种方式,你可以直接查看...

    java阅读源码-JavaSourceCodeReading:IDEA阅读Java源码环境

    5. **符号解析**:IDEA通过索引源码来提供代码导航和查找功能。如果遇到索引问题,可以尝试重建索引或清理项目。 6. **插件安装**:有时,为了增强源码阅读体验,可能需要安装特定插件,如“JD-GUI”或“JDebugee”...

    ubuntu 18.04编译JDK 12源码包

    解压该文件后,你将得到JDK 12的源代码。 在Ubuntu 18.04上编译JDK 12源码的步骤如下: 1. **安装依赖**:在编译源码之前,确保系统已经安装了必要的依赖库。打开终端并输入以下命令: ``` sudo apt-get update ...

    jd-gui 反编译工具

    - **代码导航**:在源代码窗口,可以使用鼠标右键点击方法或变量,选择"Go to Declaration"来跳转到其定义。 3. **反编译的局限性** - **源代码完整性**:由于反编译过程是基于字节码逆向生成源代码,因此生成的...

    java阅读源码-JavaSourceCodeRead:JavaSourceCodeRead

    在IT行业中,阅读源代码是提升技术水平和理解底层工作原理的重要途径。对于Java开发者来说,深入研究Java源码能够帮助我们更好地理解这个广泛使用的编程语言的内部机制。本篇文章将聚焦于“Java阅读源码”这一主题,...

    ekf\ukf\kf code

    如果"rm"是一个文件,它可能是与上述滤波算法相关的源代码文件或日志文件。如果是删除操作,那么可能是解压过程的一部分,即删除不再需要的临时文件。 综合来看,这个压缩包包含的代码很可能是用Java编写的,实现了...

    jdk17-linux环境安装包

    - 使用JDK 17,你可以编写`.java`源代码文件,然后通过`javac MyProgram.java`命令编译源码生成`.class`字节码文件。 - 使用`java MyProgram`命令来运行已编译的Java程序。 6. **管理多个JDK版本** - 在Linux...

    java 反编译文件

    Java反编译是将已编译的字节码(.class文件)转换回源代码的过程,这在软件逆向工程、代码分析或调试时非常有用。Eclipse是一款流行的Java集成开发环境(IDE),它并不内置反编译功能,但可以通过添加第三方插件来...

    pycharm-community-2020.3.5.tar.gz

    8. **开源与跨平台**:作为开源软件,PyCharm社区版的源代码可供用户研究和定制。同时,它支持Windows、macOS和Linux等多种操作系统,满足不同用户的开发需求。 针对Linux系统的用户,安装"pycharm-community-2020....

    JDK安装程序jdk8u191 jdk-8u191-macosx-x64.dmg

    - 编译源代码:在终端中,导航到源代码目录并运行`javac HelloWorld.java`。 - 运行程序:使用`java HelloWorld`执行编译后的类。 **5. JDK的更新与维护** - Oracle定期发布JDK的更新版本,修复安全漏洞,提高...

    jct:Java 到 C++ 转换器

    3. **OpenJDK 1.6**:作为Java开发和运行环境,OpenJDK 1.6是项目所依赖的Java开发套件,用于编译和运行`jct`的源代码。 **三、入门指南** 要开始使用`jct`,你需要按照以下步骤操作: 1. **克隆项目**:首先,从...

    jdk1.8 linux

    1. **下载JDK**:你可以从Oracle官方网站或者OpenJDK项目的源代码仓库获取适用于Linux的JDK 1.8二进制包。在终端中使用`wget`命令下载,例如: ``` wget --no-cookies --no-check-certificate --header "Cookie: ...

    JAVA应用程序入门(科大讯飞软件培训内部资料)

    - **2006年**:JDK 6.0发布,代号Mustang,并且Sun宣布开放JDK源代码,OpenJDK由此诞生。 #### Java平台的特点 - **跨平台性**:这是Java最显著的特点之一,使得Java程序可以在任何安装了Java虚拟机(JVM)的平台...

    RaspiBot-RaspiCode

    在文件结构方面,"RaspiBot-RaspiCode-master"可能包含了项目的源代码、配置文件、文档和可能的示例代码。源代码文件夹可能包含多个Java类,分别对应不同的功能模块,如运动控制、传感器读取等。配置文件可能用于...

    棕褐色的安装和设置:在Raspberry Pi,Windows,Mac和其他Linux系统上安装,设置和运行SEPIA-Framework的说明,脚本,工具和文件

    SEPIA(Socially Engaged Personalized Interactive Assistant)框架是一款开放源代码的语音助手平台,它主要用于构建聊天机器人和虚拟助手。该框架支持多种操作系统,包括Raspberry Pi(树莓派)、Windows、Mac以及...

    semeru_jsf_maven

    4. **项目结构**:典型的Maven项目结构包括`src/main/java`(源代码目录)、`src/main/resources`(非Java资源)、`src/test/java`(测试代码)和`pom.xml`(Maven配置文件)。`semeru_jsf_maven-master`可能包含了...

Global site tag (gtag.js) - Google Analytics