JVM学习路径

背景知识

  • 我希望你必须具备下面的背景知识,再开始jvm的旅程
java相关
书单备注
java基础默认需要你有java背景相关知识,熟练掌握java常规语法
thinking in java没啥说的,必读
core java和thinking in java二选一吧不过这些java砖头书里面很多内容对互联网来说真没啥用
effective java没啥说的,必读
java concurrency in practice没啥说的,必读
  
周边知识
书单备注
计算机组成原理非特定,任意相关类型书籍
数据结构非特定,任意相关类型书籍
算法非特定,任意相关类型书籍
操作系统非特定,任意相关类型书籍对于java应用程序来说,jvm可以认为是一层操作系统 
设计模式非特定,任意相关类型书籍推荐gof,head first等比较经典的书籍
  

0.0 入门中的入门

书单备注
深入理解JVM,周志明入门中的入门,这本书里的东西都是最最基础的如果这本书能勾起你对JVM进一步的兴趣,继续
JVM规范必读,在学习阶段读个2-3遍都不过分JVM的原理和最终的解释都在这里
Java语言规范必读,在学习阶段读个2-3遍都不过分Java语言的原理和最终的解释都在这里注意:JVM和Java语言两个规范在细节中是不完全一致的,想想看为什么?
  

0.1 补充知识

  • 如果你还希望坚持,说明你对JVM抱有一定的兴趣。继续的学习需要更深入的背景知识
书单备注
虚拟机 – 系统与进程的通用平台https://book.douban.com/subject/3611865/了解虚拟机的定义和发展
编译原理https://book.douban.com/subject/3296317/对编译优化感兴趣的话,必读
C/C++语言知识大型JVM一般都使用C++编写有些小型JVM也能做到纯C编写,不容易(题外话:写惯了OO的代码,看到这种尽量模仿OO的过程式的代码,真心不习惯。另外在CSDN上看到有人开了一门课,叫做用C语言构建大规模OO系统,我也是服)
汇编语言知识所有JVM的底层都离不开汇编,需要了解
深入理解计算机系统https://book.douban.com/subject/26912767/对计算机系统有一个全面的认识
  

0.2 深入学习

书单备注
oracle/sun关于hotspot的在线文档很经典
Oracle JRockithttps://book.douban.com/subject/4873919/三大虚拟机中的另一个
IBM关于J9的在线文档三大虚拟机中的最后一个
R神领衔的国内JVM社区https://hllvm.group.iteye.com/这几年随着iteye的没落也没落了
R神自己关于JVM的帖子https://rednaxelafx.iteye.com/blog/362738比较杂,不建议新人阅读
R神自己推荐的书籍https://rednaxelafx.iteye.com/blog/1886170比我列的强太多太多了
Shenandoah设计原理https://wiki.openjdk.java.net/display/shenandoah/Main号称是下一代的GC,设计比较先进不过这两年的开发进度缓慢,和死了区别不大
Zing设计原理https://www.azul.com/products/zing/virtual-machine/设计先进的商用JVM,适用内存至少64G的大型堆内存空间
Gil Tene的JVM讲义https://greenteajug.cn/2015/10/18/understanding-java-garbage-collection/
dalvik/art设计原理作为客户端的jvm,dalvik/art和服务端的jvm在设计和理念上都有不小的区别在我这样的纯粹主义者看来dalvik/art甚至不应该被称为jvm(不符合jvm规范)不过在学习方面,dalvik/art为我们提供了一个很有意思的另样角度
垃圾回收算法手册https://book.douban.com/subject/26740958/对gc算法感兴趣的话,必读
google scholar的论文非常多,筛选是个头疼的问题
  

0.3 源码阅读

  • 我不太推荐在知识储备不丰富的时候直接阅读源码
书单备注
自己动手写Java虚拟机https://book.douban.com/subject/26802084/这本书真的挺好的,浅显易懂,省略了一些比较复杂的细节原书是使用Go语言写Java虚拟机。我自己写的时候使用的是Java,实现难度不大
jamvm非常精简的jamvm,全C语言编写,阅读难度不大(回忆杀:很怀念当年我用jamvm+gnu classpath在arm4/6上面跑java服务的岁月)
其它相关jvm网上开源的小型jvm还有很多,jikes,kvm都是不错的选择
hotspot源码我不太推荐直接读,除非有比较深刻的知识储备
  

0.9 入门结束

  • 到此为止,我可以认为你已经渡过了jvm的入门阶段了,这对于我来说已经是未知领域了,祝好运