学习 JVM,从入门到精通!
对于学习 Java 的同学来说,JVM 是一个绕不过的话题。如果你想要成为高级工程师,那么了解 JVM 原理是必选项。与许多同学一样,我学习 JVM 都是从周志明老师的《深入理解 Java 虚拟机》开始的。这本书非常专业,写得非常细致,但我一开始看的时候却像看天书一样,完全看不懂!
那时候我就在想:要是有人能够用简单易懂的语言,告诉我什么是 JVM 就好了!可惜当时我没找到这样一份资料,直到我在知乎上看到树义哥关于学习 JVM 的回答。
在这篇回答里,树义哥由浅入深地介绍了学习 JVM 的步骤,并且附上了学习顺序及相关文章。这让我瞬间觉得很惊喜,这不就是我苦苦在寻找的手把手入门教程么!
这里我摘录部分回答给大家看看,感兴趣的小伙伴可以自行到知乎上查看全文。
知乎问题:Java JVM 怎么学习啊?从哪方面入手?
回答:曾经我也对 JVM 感到很头痛,完全搞不懂应该如何入门 JVM 的学习。但经过了 5 年的学习,我对 JVM 有了更深入的理解。虽然还达不到精通源码的程度,但是对 JVM 各个知识点的理解和联系都形成了自己的体系。
对于初学者来说,首先理解为什么要学虚拟机是最重要的,关于这块内容建议阅读我的这篇文章:JVM 基础系列开篇:为什么要学虚拟机? 当你明白为什么要学虚拟机之后,你需要明白:到底什么是虚拟机?这时候建议阅读我的这篇文章:JVM 基础系列第 3 讲:到底什么是虚拟机? 看到这里,我相信你应该对虚拟机有了一个感性的认识了。那么接下来你需要继续深入学习,明白编译器是如何将 java 文件编译成 class 文件的。这时候你需要学习:编译器以及字节码文件相关知识。这时候推荐阅读下面几篇文章:JVM 基础系列第 4 讲:从源代码到机器码,发生了什么? 看到这里,你应该明白了不少知识,我们的源文件(java 文件)也顺利编译成了字节码文件(class 文件)。接下来就是运行程序并输出结果了,那么 JVM 是如何将字节码文件的内容加载到内存的(类加载机制),加载到内存之后又是如何进行数据存放的(JVM 内存模型)。这个时候你应该学习:Java 类加载机制、JVM 内存模型,这时候推荐阅读下面几篇文章:JVM 基础系列第 6 讲:Java 虚拟机内存结构、JVM 基础系列第 7 讲:JVM 类加载机制。 当我们把数据加载并存放于内存之后,就又有一个问题出现了:内存是有限的,那么势必会涉及到内存回收的问题。这时候你应该学习 Java 垃圾回收机制、Java 回收器的相关内容。这时候推荐下面几篇文章:JVM 基础系列第 8 讲:JVM 垃圾回收机制。 学习到这里,你对 JVM 有了一个全面的了解。从源文件到字节码,从字节码到机器码,从机器码到内存模型,从内存到垃圾回收。你对 JVM 的基础知识也掌握得差不多了,但是如果要进行线上问题排查的话,还差一些排查知识的学习。这时候需要学习常见的 JVM 参数以及 JVM 的排查工具,这时候推荐下面几篇文章:JVM 基础系列第 11 讲:JVM 参数之堆栈空间配置。 到了这里,你不仅掌握了基础的 JVM 理论知识,还掌握了一些基础的问题排查技巧。接下来你要做的就是多学习一些 JVM 的问题排查案例,在实战中不断总结 JVM 排查的技巧,从而夯实自己的理论基础。
树义哥的 JVM 入门教程系列,最初在 2018 年 11 月份,发布于博客园上。截止目前为止,几乎每篇文章的阅读都超 2 万,总计阅读量已经超过了 20 万。
与其他 JVM 教程不同的是,树义哥的 JVM 教程不仅告诉理论知识,还告诉你为什么要学 JVM,并且还用由浅入深的方式逐步教会你。
它没有像其他文章一样,直接把所有 JVM 理论知识一股脑塞给你,而是由浅入深、一步步地带你剥开 JVM 神秘的面纱,让你看完之后直呼过瘾!我们其实从教程的目录上,就可以感受到由浅入深的设计理念。
JVM 入门教程开篇:为什么要学虚拟机? JVM 入门教程第 1 讲:Java 语言的前世今生 JVM 入门教程第 2 讲:Java 虚拟机的历史 JVM 入门教程第 3 讲:到底什么是虚拟机? JVM 入门教程第 4 讲:从源代码到机器码,发生了什么? JVM 入门教程第 5 讲:字节码文件结构 JVM 入门教程第 6 讲:Java 虚拟机内存结构 JVM 入门教程第 7 讲:JVM 类加载机制 JVM 入门教程第 8 讲:JVM 垃圾回收机制 JVM 入门教程第 9 讲:JVM 垃圾回收器 JVM 入门教程第 10 讲:垃圾回收的几种类型 JVM 入门教程第 11 讲:JVM 常见参数配置(堆栈配置等) JVM 入门教程第 12 讲:JDK 性能监控命令
这其实也是这篇教程最大的特色,即完全是为小白入门 JVM 而写的。许多 Java 小白同学看完之后,纷纷留言点赞教程写得非常好!
为了避免教程内容有错误,树义哥还逐字逐句查阅了《Java 虚拟机规范》。要知道《Java 虚拟机规范》可是 JVM 的规范,所有类型的虚拟机都需要遵守。
为了便于大家进一步学习,其也将其阅读《Java 虚拟机规范》的笔记整理成文章,方便大家进一步学习。
另外,树义哥还整理了一份学习 Java 虚拟机的必读书单,方便大家进一步深入学习。如果你学完这个教程之后,还想进一步深入学习,那么可以看看这个书单里面的内容。这个书单覆盖了市面上能找到的所有 JVM 书籍,极大方便了大家的学习。
想要获取上面这些教程和资源,只需要关注树义哥的公众号,在公众号后台回复「JVM 入门教程」即可获取教程阅读地址以及书单内容。
如果看的时候有不懂的,还可以加树义哥微信交流,赶紧学起来吧~