读《深入理解 Java 虚拟机》的一些思考

周志明的《深入理解 Java 虚拟机》作为 Java 必读经典,很惭愧直到工作两年多以后才第一次拜读,不得不说,写的确实好!

1. 为什么读这本书

首先想先讲讲为什么读这本书,我22 年毕业,大学期间对 Java 的学习程度只能说是会一点皮毛,对 Java 很多底层运行逻辑并不算太熟悉,大学毕业为了找工作,也会在网上看一些博客讲解 JVM 相关的知识,不过这些博客整体知识点还是很零散,不够系统,对底层工作原理其实还是有很多不了解的;在有一定工作经验之后,想要对 JVM 的知识有一个更加系统的认识和更深的理解,于是了解到这本 Java 必读经典~

2. JVM 是什么

JVM,即 Java Virtual Machine ,Java 虚拟机,Java 是运行在 JVM 上的,JVM 才是运行在操作系统之上,大体层次如下:

alt text

相比较 C/C++,C/C++ 在编译之后是转化成「特定平台的本地机器码」,由操作系统来加载并执行;

C/C++ 在不同平台生成的机器码「不完全」相同,相较于 Java 而言,C/C++ 跨平台的能力较低,因为 Java 是运行在 JVM 上,Java 代码在真正执行之前,会先编译成「与平台无关的字节码」,字节码是 JVM 识别的语言,然后再由 JVM 将字节码转义成「相应平台的本地机器码」,由 JVM 来抹平不同平台机器码不一样的差异性,使得 Java 的跨平台性较强(一次编译,多处运行);

Java 开发者也可以更加关注逻辑部分的开发,底层运行的差异性已经由「不同版本」的 JVM「抹平」了。

所以,一句话总结 JVM 就是 Java 代码运行的「容器」,是一层中间抽象层,JVM 是真正对接操作系统的“软件”。

3. 为什么要学习了解 JVM

JVM 作为 Java 代码运行的「容器」,为了能够帮助 Java 程序能够更加高效的运行,引入了内存管理、垃圾回收、类加载机制等高级特性,如果对这些特性没有任何程度的理解的话,也很难写出高效代码,对底层原理没有了解,不知所以然,很容易写出来有问题的代码~

  • 在了解 JVM 工作原理之后,当服务运行出现了 GC 频繁、FullGC 低效回收垃圾等问题时,利用 JVM 提供的各种排查工具,分析内存情况,分析可能出现问题的代码;

  • 了解 JVM 工作原理,能够根据 JVM 提供出来的参数,根据业务属性来对 JVM 进行「调整」(JVM 调优),让 JVM 运行的更加“健康”;

  • 了解 JVM 的类加载机制,就能够更好的理解 Java 反射 API 、动态代理、动态字节码生成等功能的底层原理;

4. JVM 重要知识点

下面,我将分内存管理、类加载机制、对并发的支持三篇文章来写我对 JVM 的一些思考~

  1. 【JVM】内存管理

  2. 【JVM】类加载机制

  3. 【JVM 并发支持】