JVM掌握的知识点
Java基础学完之后,JVM相关的知识点也要知道一点。
JVM作为Java背后运行的基础支撑,对一个资深的程序员来说,是必须掌握的,在面试中,也是必问的。
个人认为JVM知识能够提高写代码的质量,而且在出现bug的时候,可以通过JVM知识进行快速定位问题,比如堆栈溢出、GC(Java垃圾回收)等等。
那要掌握哪些JVM知识呢?个人觉得初入门Java的小伙伴,掌握以下知识点就够了,随着经验越来越丰富,相信你也会不言而喻的:
- JVM内存模型
- Java运行区域
- 类加载过程
- Java垃圾回收和JVM常见参数
- 二进制字节码查看,Java常用的命令、使用(jmap, jvisualvm, jstat, jconsole等)
相信大部分小伙伴都会问一个问题:
就是掌握这些JVM知识点有什么用?
在刚入门Java的时候,我并没有想过这个问题。
因为在那个资源匮乏和Java 数组 (opens new window)没有引路人的时代,我是通过自学进入这个行业的,大部分的Java基础书籍,都没有讲到这些JVM内容。
所以在学习完了Java,甚至在工作了一年多的时候,我很好奇Java到底是怎么运行的。而不是简简单单的知道它是需要JVM、通过 java -c
编译,需要通过main方法运行的.....
为此,我疑惑了很久。
有一种囫囵吞枣地学习,却无法理解背后的原理,无法把知识串联起来的感觉
后来,随着开发经验的积累,我终于把JVM和Java串联了起来。
刚开始接触JVM知识点的时候,觉得很乏味,晦涩难懂,对日常开发并没有明显的作用,但因为接触了JVM,因为一次线上的bug,通过JVM的知识更快的解决了线上的问题。
也解决了很多疑问,比如说:
- Java内存模型的出现和CPU的MESI有关系,你在用
synchronized
和volatile
的时候,其实并不是Java层面的实现。 - Java运行区域让栈堆溢出的原因更容易排查,类、方法、对象的使用和创建为什么要注意,直接的用法是String和StringBuilder的使用。
- 类加载过程会让你知道一个类是怎么样运行的,springboot的jar为什么可以运行,tomcat下的war为什么又可以自动运行。
- Java垃圾回收就更重要了,Java的垃圾回收的一个过程,频繁的GC会影响Java的运行,而掌握Java的命令,则可以看到GC的原因。
- .....
说了这么多,其实就是想说 JVM虽然不能提高我们的开发效率,但是有助于提高我们的开发质量。
而不是仅仅为了面试。
在这里推荐一本书:
《深入Java虚拟机》
上次更新: 2025-02-21 06:04:57