一、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)来实现整个程序的功能。