资深程序员怎么学JVM?
Posted 四猿外
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了资深程序员怎么学JVM?相关的知识,希望对你有一定的参考价值。
资深程序员怎么学
这时候的你,已经开始承担项目开发中很重要的职责了,有些出色的朋友都开始带团队了。那这时候,你可能会做下面的事:
1. 合理规划项目使用资源
合理规划项目使用资源,前提是对垃圾回收有非常深入的了解。
如果说在新手期,已经对 Java 对象的内存分配和内存使用有了大致的概念,那么,这个垃圾回收,则是这类知识的进一步拓展。
只有理解了各种垃圾回收的原理,再配合着 Java 内存布局的基础知识,才能更好地规划出项目用什么回收算法,才能在合适的资源利用度上得到最佳性能。
比如,新生代和老年代之间的合适比例。比如,新生代中 Eden 和 Survivor 区域间的比例。
2. 排查各种线上问题
要排查各种问题,就需要对 JVM 提供的各种故障排查工具非常了解。
这些工具又分为两类:
- 基础的命令行形式的故障处理工具,比如 jps、jstack 等等
- 第二类是可视化的故障处理工具,比如 VisualVM
但是,掌握工具的使用还不够。因为有关垃圾回收的问题,还必须得通过解析 GC 日志后,再通过工具的使用,才可能能定位到问题的根源。
所以,最好对使用故障排查工具和 GC 日志都非常熟练。
比如:
2021-05-26T14:45:37.987-0200: 151.126:
[GC (Allocation Failure) 151.126: [DefNew: 629119K->69888K(629120K), 0.0584157 secs] 1619346K->1273247K(2027264K), 0.0585007 secs]
[Times: user=0.06 sys=0.00, real=0.06 secs]
2021-05-26T14:45:59.690-0200: 172.829:
[GC (Allocation Failure) 172.829: [DefNew: 629120K->629120K(629120K), 0.0000372 secs]172.829: [Tenured: 1203359K->755802K(1398144K), 0.1855567 secs] 1832479K->755802K(2027264K), [Metaspace: 6741K->6741K(1056768K)], 0.1856954 secs]
[Times: user=0.18 sys=0.00, real=0.18 secs]
上面这条,应该一眼看出来,垃圾算法用的是 Serial 收集器,并且年轻代分配出现了问题,大小可能需要调整。
这里的知识点,强烈反对看网上的文章,网上说的很多细节有问题,疏漏很多。所以,推荐看书。
《Java Performance》第二版里,“Chapter 5. An Introduction to Garbage Collection”,“Chapter 6. Garbage Collection Algorithms”的知识已经足够。
有人去看《深入理解 JAVA 虚拟机》第三版中的第 3 章,讲垃圾收集器与内存分配策略的。这里还是老问题,讲的太细,我建议绕过 3.4 节,讲 HotSpot 算法细节的那块儿。
这里安全点这个知识点挺重要,但是现在这个阶段想理解挺难的。我觉得将来做一些底层框架,接触到崩溃恢复的 checkpoint 相关思想了,再回头来学习,那才能真正理解和掌握。
以上是关于资深程序员怎么学JVM?的主要内容,如果未能解决你的问题,请参考以下文章
阿里P7程序员竟不知 jvm红黑树!Facebook开源全新编程语言Skip;Stack Overflow 10周年