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