双管齐下, 清华教授亲码 JDK 和 HotSpot 源码笔记,一次性学个明白
索引
历史上的原因是,OpenJDK 是 JDK 的开放原始码版本,OpenJDK 是 Sun 在 2006 年末把 Java 开源而形成的项目,这里的“开源”是通常意义上的源码开放形式,即源码是可被复用的,例如 IcedTea、UltraViolet 都是从 OpenJDK 源码衍生出的发行版。
把这些 JRL 许可证形式的 Sun/OracleJDK 源码和对应版本的 OpenJDK 源码进行比较,发现除了文件头的版权注释之外,其余代码基本上都是相同的,只有字体渲染部分存在一点差异,Oracle JDK 采用了商业实现,而 OpenJDK 使用的是开源的 FreeType。当然,“相同”是建立在两者共有的组件基础上的,Oracle JDK 中还会存在一些 Open JDK 没有的、商用闭源的功能.
HotSpot 历史
HotSpot 是 Sun JDK 和 OpenJDK 中所带的虚拟机,也是目前使用范围最广的 Java 虚拟机。 但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初并非由 Sun 公司开发,而是由一家名为“Longview Technologies”的小公司设计的; 甚至这个虚拟机最初并非是为 Java 语言而开发的,它来源于 Strongtalk VM, 而这款虚拟机中相当多的技术又是来源于一款支持 Self 语言实现“达到 C 语言 50%以上的执行效率”的目标而设计的虚拟机, Sun 公司注意到了这款虚拟机在 JIT 编译上有许多优秀的理念和实际效果,在 1997 年收购了 Longview Technologies 公司,从而获得了 HotSpot VM。
SUN 的 JDK 版本从 1.3.1 开始运用 HotSpot 虚拟机, 2006 年底开源,主要使用 C++实现,JNI 接口部分用 C 实现。
HotSpot 是较新的 Java 虚拟机,用来代替 JIT(Just in Time),可以大大提高 Java 运行的性能。
Java 原先是把源代码编译为字节码在虚拟机执行,这样执行速度较慢。而 HotSpot 将常用的部分代码编译为本地(原生,native)代码,这样显着提高了性能。
下面分享清华教授亲码的 JDK 和 HotSpot 源码:
JDK 源码手册
除了第一章节的内容外,我们会从第二章开始自下而上,从简单到复杂的有顺序的深度学习整个 Concurrent 包!


Semaphore(Semaphore 也就是信号量,提供了资源数量的并发访问控制)


HotSpot 源码手册
这份手册主要讲述的就是 HotSpot 基础功能模块的源码,这份手册对于你基础地基将会是一个很好的补充,同时手册将会结合大量的实例进行讲解,这样对于受众来说将会更加容易接受以及吸收。




HandleArea、Area 与 Chunk

klassVtable 类

Space 类
Generation 类的实现是基于 Space 类的,Space 类负责实际的内存管理

最后
有需要这份笔记的小伙伴可关注+点赞文章后 扫码获取

评论