
JVM(Java Virtual Machine)主要由以下几个核心组成部分构成:
1. 类加载器子系统 (Class Loader Subsystem):
作用:
类加载器类型:
<JAVA_HOME>/jre/lib
)。<JAVA_HOME>/jre/lib/ext
或
java.ext.dirs
指定的目录)。双亲委派模型: 除了启动类加载器,每个类加载器都有一个父类加载器。当一个类加载器需要加载类时,它首先会委托给父类加载器去加载,只有当父类加载器无法加载时,才由自己加载。
2. 运行时数据区 (Runtime Data Areas):
方法区 (Method Area):
堆 (Heap):
虚拟机栈 (VM Stack):
StackOverflowError
: 线程请求的栈深度大于虚拟机允许的深度。OutOfMemoryError
: 虚拟机栈无法申请到足够的内存(如果可以动态扩展)。本地方法栈 (Native Method Stack):
程序计数器 (Program Counter Register):
OutOfMemoryError
情况的区域。3. 执行引擎 (Execution Engine):
解释器 (Interpreter):
即时编译器 (JIT Compiler):
垃圾回收器 (Garbage Collector):
本地方法接口 (JNI, Java Native Interface):
总结:
| JVM 组成部分 | 作用 |
|---|---|
| 类加载器子系统 | 加载类文件(.class 文件)到 JVM 中,包括加载、链接(验证、准备、解析)和初始化三个阶段。 |
| 运行时数据区 | JVM 在运行 Java 程序时管理的内存区域,包括方法区、堆、虚拟机栈、本地方法栈、程序计数器。 |
| 执行引擎 | 执行 Java 字节码指令,包括解释器、即时编译器、垃圾回收器。 |
| 本地方法接口(JNI) | 允许Java代码与本地代码(通常是C或C++)交互 |
