背景知识
- 我希望你必须具备下面的背景知识,再开始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 JRockit | https://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的入门阶段了,这对于我来说已经是未知领域了,祝好运