01_什么是JVM?
什么是JVM?
定义
Java Virtual Machine : Java程序的运行环境( Java二进制字节码的运行环境)
好处
- 一次编写随处运行
- 自动内存管理(垃圾回收管理)
- 数组下标越界检查(C/C++中数组下标越界是不做任何检查的,越界可能会导致覆盖到其他代码使用的内存)
- 多态(面向对象的基石,使用虚方法表来实现多态,借鉴了C++)
比较
JVM/JRE/JDK三者的区别及关系见下图

学习JVM有什么用?
- 面向面试官编程(大家都懂~)
- 理解底层的实现原理(比如自动拆装箱怎么实现的,增强for循环,动态代理是怎么实现的)
- 中高级程序员的必备技能(不光是要写CRUD和业务逻辑,还需要解决和定位一些实际问题,比如项目上线后响应缓慢,内存溢出等)
常见的JVM有哪些?
首先JVM是一套规范,市面上有很多遵循该规范的JVM实现,以下是常见JVM对比,图片摘自维基百科

注: 本系列涉及到的所有内容均是HotSpot虚拟机
学习内容包含哪些?

由上图JVM的构成可以看出JVM主要有三部分构成:
- 类加载器
- JVM内存结构(即运行时数据区,核心关注这里 的栈、堆、方法区)
- 执行引擎(一般都是JIT编译器和解释器共存)
对于执行引擎而言:
- JIT编译器(主要影响性能):编译执行; 一般热点数据会进行二次编译,将字节码指令变成机器指令。将机器指令放在方法区缓存
- 解释器:逐行解释字节码
一个JAVA类从编译到执行的流程:
- 将JAVA类源码编译为二进制字节码
- 通过类加载器将该类二进制字节码加载到JVM中
- 类相关的信息加载到JVM内存中的方法区
- 类中创建的实例对象存放在JVM内存中的堆区
- 堆中的对象在调用方法时又会用到虚拟机栈,程序计数器,本地方法栈
- 方法执行时每行代码是由执行引擎中的解释器进行逐行解释执行
- 方法中的热点代码(频繁调用的代码)会被JIT编译器进行优化后执行
- 垃圾回收器GC对堆中的不再被引用的对象进行定期的回收释放内存
- 如果用到了JAVA代码不方便实现的功能,必须调用底层操作系统的功能,此时借助本地方法接口来调用操作系统提供的一些功能方法
本系列主要学习以下内容:
- JVM内存结构
- GC垃圾回收
- 类的字节码结构及编译前优化
- 类加载器(类加载的几个阶段,有哪些加载器)
- 类运行时的运行期优化(即时编译器优化)

浙公网安备 33010602011771号