- 浏览: 3049444 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
这是链接帖。主体内容都在各链接中。
怕放草稿箱里过会儿又坑掉了,总之先发出来再说…回头再慢慢补充内容。
先把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 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到老版本的维护分支。
类似这样。当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到底有多像?
说真的我也不知道准确答案。从外部看:
这种情况下,还是让我们相信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
----------------------------
编译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的目标、高层架构、性能水平等。
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
===========
怕放草稿箱里过会儿又坑掉了,总之先发出来再说…回头再慢慢补充内容。
先把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 Darcy在OSCON 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.
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.
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
===========
发表评论
-
The Prehistory of Java, HotSpot and Train
2014-06-02 08:18 0http://cs.gmu.edu/cne/itcore/vi ... -
MSJVM and Sun 1.0.x/1.1.x
2014-05-20 18:50 0当年的survey paper: http://www.sym ... -
Sun JDK1.4.2_28有TieredCompilation
2014-05-12 08:48 0原来以前Sun的JDK 1.4.2 update 28就已经有 ... -
IBM JVM notes (2014 ver)
2014-05-11 07:16 0Sovereign JIT http://publib.bou ... -
class data sharing by Apple
2014-03-28 05:17 0class data sharing is implement ... -
Java 8与静态工具类
2014-03-19 08:43 16278以前要在Java里实现所谓“静态工具类”(static uti ... -
Java 8的default method与method resolution
2014-03-19 02:23 10453先看看下面这个代码例子, interface IFoo { ... -
HotSpot Server VM与Server Class Machine
2014-02-18 13:21 0HotSpot VM历来有Client VM与Server V ... -
Java 8的lambda表达式在OpenJDK8中的实现
2014-02-04 12:08 0三月份JDK8就要发布首发了,现在JDK8 release c ... -
GC stack map与deopt stack map的异同
2014-01-08 09:56 0两者之间不并存在包含关系。它们有交集,但也各自有特别的地方。 ... -
HotSpot Server Compiler与data-flow analysis
2014-01-07 17:41 0http://en.wikipedia.org/wiki/Da ... -
基于LLVM实现VM的JIT的一些痛点
2014-01-07 17:25 0同事Philip Reames Sanjoy Das http ... -
tailcall notes
2013-12-27 07:42 0http://blogs.msdn.com/b/clrcode ... -
《自制编程语言》的一些笔记
2013-11-24 00:20 0http://kmaebashi.com/programmer ... -
字符串的一般封装方式的内存布局 (1): 元数据与字符串内容,整体还是分离?
2013-11-07 17:44 22396(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局 (0): 拿在手上的是什么
2013-11-04 18:22 21495(Disclaimer:未经许可请 ... -
字符串的一般封装方式的内存布局
2013-11-01 12:55 0(Disclaimer:未经许可请 ... -
关于string,内存布局,C++ std::string,CoW
2013-10-30 20:45 0(Disclaimer:未经许可请 ... -
对C语义的for循环的基本代码生成模式
2013-10-19 23:12 21874之前有同学在做龙书(第二版)题目,做到8.4的练习,跟我对答案 ... -
Java的instanceof是如何实现的
2013-09-22 16:57 0Java语言规范,Java SE 7版 http://docs ...
相关推荐
通过熟练使用这些功能,你可以在阅读源代码时更高效地理解Java的运行机制,提升编程技能。 总之,下载Java源代码并将其配置到MyEclipse中,是深入学习Java和提升编程能力的重要步骤。通过这种方式,你可以直接查看...
5. **符号解析**:IDEA通过索引源码来提供代码导航和查找功能。如果遇到索引问题,可以尝试重建索引或清理项目。 6. **插件安装**:有时,为了增强源码阅读体验,可能需要安装特定插件,如“JD-GUI”或“JDebugee”...
解压该文件后,你将得到JDK 12的源代码。 在Ubuntu 18.04上编译JDK 12源码的步骤如下: 1. **安装依赖**:在编译源码之前,确保系统已经安装了必要的依赖库。打开终端并输入以下命令: ``` sudo apt-get update ...
- **代码导航**:在源代码窗口,可以使用鼠标右键点击方法或变量,选择"Go to Declaration"来跳转到其定义。 3. **反编译的局限性** - **源代码完整性**:由于反编译过程是基于字节码逆向生成源代码,因此生成的...
在IT行业中,阅读源代码是提升技术水平和理解底层工作原理的重要途径。对于Java开发者来说,深入研究Java源码能够帮助我们更好地理解这个广泛使用的编程语言的内部机制。本篇文章将聚焦于“Java阅读源码”这一主题,...
如果"rm"是一个文件,它可能是与上述滤波算法相关的源代码文件或日志文件。如果是删除操作,那么可能是解压过程的一部分,即删除不再需要的临时文件。 综合来看,这个压缩包包含的代码很可能是用Java编写的,实现了...
- 使用JDK 17,你可以编写`.java`源代码文件,然后通过`javac MyProgram.java`命令编译源码生成`.class`字节码文件。 - 使用`java MyProgram`命令来运行已编译的Java程序。 6. **管理多个JDK版本** - 在Linux...
Java反编译是将已编译的字节码(.class文件)转换回源代码的过程,这在软件逆向工程、代码分析或调试时非常有用。Eclipse是一款流行的Java集成开发环境(IDE),它并不内置反编译功能,但可以通过添加第三方插件来...
8. **开源与跨平台**:作为开源软件,PyCharm社区版的源代码可供用户研究和定制。同时,它支持Windows、macOS和Linux等多种操作系统,满足不同用户的开发需求。 针对Linux系统的用户,安装"pycharm-community-2020....
- 编译源代码:在终端中,导航到源代码目录并运行`javac HelloWorld.java`。 - 运行程序:使用`java HelloWorld`执行编译后的类。 **5. JDK的更新与维护** - Oracle定期发布JDK的更新版本,修复安全漏洞,提高...
3. **OpenJDK 1.6**:作为Java开发和运行环境,OpenJDK 1.6是项目所依赖的Java开发套件,用于编译和运行`jct`的源代码。 **三、入门指南** 要开始使用`jct`,你需要按照以下步骤操作: 1. **克隆项目**:首先,从...
1. **下载JDK**:你可以从Oracle官方网站或者OpenJDK项目的源代码仓库获取适用于Linux的JDK 1.8二进制包。在终端中使用`wget`命令下载,例如: ``` wget --no-cookies --no-check-certificate --header "Cookie: ...
- **2006年**:JDK 6.0发布,代号Mustang,并且Sun宣布开放JDK源代码,OpenJDK由此诞生。 #### Java平台的特点 - **跨平台性**:这是Java最显著的特点之一,使得Java程序可以在任何安装了Java虚拟机(JVM)的平台...
在文件结构方面,"RaspiBot-RaspiCode-master"可能包含了项目的源代码、配置文件、文档和可能的示例代码。源代码文件夹可能包含多个Java类,分别对应不同的功能模块,如运动控制、传感器读取等。配置文件可能用于...
SEPIA(Socially Engaged Personalized Interactive Assistant)框架是一款开放源代码的语音助手平台,它主要用于构建聊天机器人和虚拟助手。该框架支持多种操作系统,包括Raspberry Pi(树莓派)、Windows、Mac以及...
4. **项目结构**:典型的Maven项目结构包括`src/main/java`(源代码目录)、`src/main/resources`(非Java资源)、`src/test/java`(测试代码)和`pom.xml`(Maven配置文件)。`semeru_jsf_maven-master`可能包含了...