总体概括的话有类加载子系统、运行时数据区、执行引擎和本地方法接口四大核心模块。 其中
1、类加载子系统负责加载字节码文件,包含加载、链接、初始化三个重要阶段;
- 加载--查找并读取类文件二进制数据;
- 链接--验证字节码、分配静态变量内存、解析符号信用;
- 初始化--执行类构造器方法,完成静态变量赋值。
2、运行时数据区包含线程私有区域和线程共享区域;
- 线程私有区域又分为程序计数器、虚拟机栈和本地方法栈,可通过-Xss配置栈大小信息;
- 程序计数器--记录当前线程执行的字节码指令地址,唯一无OOM的区域;
- 虚拟机栈--存储方法调用的栈帧,包含局部变量表、操作数栈等;
- 本地方法栈--支持native方法执行的结构。
- 线程共享区域又分为堆和方法区,可通过-Xmx配置上限参数;
- 堆--存放对象实例和数组,分为新生代、老年代和元空间;
- 方法区(元空间)--存储类元数据、常量池等。
3、执行引擎包含解释器、即时编译器和垃圾回收器,负责将字节码转换为机器指令并优化执行效率。
4、本地方法接口(JNI)是提供Java代码调用本地方法的能力。