![cover](https://my-blog-pwd.oss-cn-shenzhen.aliyuncs.com/image-20230506094411247.png)
JVM的组成
一、JVM是什么
Java Virtual Machine Java程序的运行环境(java二进制字节码的运行环境)
好处:
一次编写,到处运行
自动内存管理,垃圾回收机制
二、JVM由哪些部分组成,运行流程是什么?
三、从图中可以看出 JVM 的主要组成部分
类加载器子系统(Class Loader Subsystem):
加载器(ClassLoader): 负责加载Java类文件,将类文件的字节码数据加载到内存中,生成对应的Class对象。
委托模型(Delegation Model): 采用父类委托机制,即先由父类加载器尝试加载类,如果失败,则由子类加载器尝试加载。
运行时数据区(Runtime Data Area):
方法区(Method Area): 存储类的元信息、静态变量、常量等。
堆(Heap): 存储对象实例和数组。被所有线程共享,用于垃圾回收。
PC程序计数器(Program Counter Register):线程私有的,内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。
栈(Stack): 每个线程有一个私有的栈,用于存储局部变量、操作数栈、方法调用等信息。
本地方法栈(Native Method Stack): 用于支持本地方法的调用。
执行引擎(Execution Engine):
解释器(Interpreter): 将字节码解释成机器码并执行。
即时编译器(Just-In-Time Compiler,JIT): 将热点代码(频繁执行的代码)编译成本地机器码,提高执行效率。
垃圾收集(Garbage Collection):
JVM进行垃圾回收来释放不再使用的对象所占用的内存。
本地方法接口(Native Interface): 允许Java代码调用本地库中的方法。
本地方法库(Native Method Library): 包含一组本地方法的库,提供与底层系统交互的接口。
四、运行流程:
(1)类加载器(ClassLoader)把Java代码转换为字节码
(2)运行时数据区(Runtime Data Area)把字节码加载到内存中,而字节码文件只是JVM的一套指令集规范,并不能直接交给底层系统去执行,而是有执行引擎运行
(3)执行引擎(Execution Engine)将字节码翻译为底层系统指令,再交由CPU执行去执行,此时需要调用其他语言的本地库接口(Native Method Library)来实现整个程序的功能。