Java-Virtual-Machine

Java虚拟机资源汇总

最后更新时间

2019-10-24

注意

  1. 资料的排列的顺序不分先后。
  2. 资料的所有权归原作者所有,这里是汇总。
  3. 知识水平的限制,导致资料的介绍或者范围有一定的局限性,欢迎指出。

8. JVM 3000问

1. 为何从Java8开始,Permanent区域被取消变成了Metaspace区域

该文介绍了HotSpotVM的Permanent(永久代)变化为Metaspace(元数据)的原因和影响,文章是日文的,近期可能会翻译成中文

2. 先有Class还是先有Object

源自知乎的一个问题,对于Java来说,所有类的父类都是Object类,但是Object类本身又属于类类型,即Class类型,那么问题就来了。

3. JVM简史

源自周老师的文章,讲述了JVM虚拟机的发展史,以及各种各样的Java虚拟机

4. lambda表达式的实现原理

作者:让猪再飞会

虽然Java12都出来了,但是对于lambda表达式的实现原理以及用法你或许还是一知半解,可以阅读以下这篇文章,会有收获。

5. Invokedynamic Java的秘密武器

来自infoq的翻译文章,主要是讲述了InvokeDynamic指令所起到的作用。

6. Java到底是值传递还是引用传递

作者:假不理

作者从问题的源头出发详细的分析了Java为何是值传递这一问题。

9. Java 虚拟机规范

虚拟机规范,对Java虚拟机的抽象实现作了一定的规定和描述,但并没有规定具体的实现方式,虚拟机的厂商只要遵守了规范的规定,实现方式是可以自由选择的。 规范可以作为工具类书籍随时查看,虽然现在Java已经更新到12了,但是其实虚拟机的规范变化不是很大。读者们仍然可以参照周先生翻译的Java SE 8 或者 Java SE 7 规范。

Java 虚拟机规范英文版

资料类型:HTML,PDF

版本:Second Edition~ Java SE 11 Edition

Java 虚拟机规范中文版

资料类型:书籍,PDF

作者:周志明 等

  • 《Java虚拟机规范(Java SE 7版)》
  • 《Java虚拟机规范(Java SE 8版)》

10. 文章系列

10.1 手写JVM系列

作者:zachaxy

该系列从解析class文件开始,一步一步教读者如何去手动实现一个简单的玩具。文章思路清醒,排版优美。相关源代码可以参考原作者的github。

10.2 Java虚拟机原理图解

作者:亦山

作者通过大量的图例向读者们解释了虚拟机的部分原理,十分易懂。

10.3 Java虚拟机

作者:五月的仓颉

10.4 RednaxelaFX的博客

作者:RednaxelaFX

R大曾经在Oracle虚拟机组工作过,对虚拟机的理解无论是理论还是代码十分厉害,他个人的博客下有许多文章,读者可根据需要自由选择,不过貌似已经不更新了。

10.5 你假笨的博客

作者:你假笨

10.6 JVM实用参数系列

原作者:Sven Ruppert

译者:并发编程网

11 编程练习

11.1 使用Go语言编写的虚拟机

作者:zxh0

语言:go

jvm.go的编写者是《自己动手写Java虚拟机》的作者,参照书籍应该能方便读者理解。

11.2 使用C++编写的虚拟机

作者:Cthulhu

语言:C++

11.3 使用Java编写的虚拟机

11.3.1 使用Java编写的虚拟机

作者:kevinlynx

语言:Java

该项目由相关配套的文章,一起食用效果更好

11.3.2 使用Java编写的虚拟机

作者:caoym

语言:Java

该项目也有相关配套的文章,实现了一个刚好能够运行HelloWorld的简单虚拟机

11.3.3 使用Java编写的虚拟机

作者:zachaxy

语言:Java

12 书籍

12.1 深入理解Java虚拟机

国内目前来说最好的JVM相关书籍,周先生的水平毋庸置疑。在此书发行之前,国内好像没有一本完整介绍JVM的书籍。另外,目前市面上也有几本与JVM相关的书籍,评价多半是不好的,有的是抄袭,有的是内容比较浅,有的是作者本身就没有搞清楚就大写特写,另外有的全篇充斥大段代码,充占篇幅。

作者:周志明

  • 《深入理解Java虚拟机:JVM高级特性与最佳实践》

12.2 垃圾回收的算法与实现

介绍了垃圾回收的算法,该书分为两个部分,算法篇和实现篇。算法篇描述时使用伪代码来描述,脱离了具体的语言,实现篇需要有一定的C/C++的基础 才能较好地理解,另外本书的翻译稍显生硬,如果有能力建议读者直接阅读日文原版为好。

作者:中村成洋

  • 《垃圾回收的算法与实现》

12.3 自己动手写Java虚拟机

作者从0开始一步一步教读者写一个较为完整的虚拟机,虽然说该虚拟机是使用go语言编写的,但是如果读者使用过其他编程语言,也应该没有问题。

作者:张秀宏

  • 《自己动手写Java虚拟机》

13 最后

如果有好的文章,书籍,欢迎提pull request。一起交流,一起进步。

更新日志

  • 重新整理格式(2019-01-22)
  • 目录整理,内容小范围修改(2019-01-23)
  • 添加[五月的仓颉]系列文章(2019-01-28)
  • 添加新的内容,JVM有关的问题(2019-02-01)
  • 添加[并发编程网]系列文章(2019-03-12)
  • 添加[你假笨]文章(2019-04-05)
  • 添加[先有蛋还是先有鸡]问题(2019-04-09)
  • 添加[JVM简史]文章(2019-04-15)
  • 添加[添加lambda表达式]相关文章(2019-04-23)
  • 添加[InvokeDynamic]文章(2019-04-28)
  • 添加[Java值传递]文章(2019-10-24)