Java虚拟机体系结构

kolbe 2021年09月13日 88次浏览

1 JVM体系结构图

JVM架构图.png

JVM主要由类加载系统、运行时数据区、执行引擎、本地方法接口等组成。

2 类加载器

类加载器主要负责将编译好的class文件加载到内存中(方法区),使JVM可以实例化使用加载过后的类。
类加载器分为加载、链接(验证、准备、解析)、初始化三步。

  • 加载:通过类的全限定名和ClassLoader加载类,主要是将指定的.class文件加载至JVM。当类被加载以后,在JVM内部就以“类的全限定名+ClassLoader实例ID”来标明类。在内存中,ClassLoader实例和类的实例都位于堆中,它们的类信息都位于方法区。
  • 验证:校验class文件的正确性
  • 准备:为类分配内存并初始化静态变量
  • 解析:将符号引用解析成直接引用
  • 初始化:初始化类的静态变量并执行static代码和构造函数

3 运行时数据区

虚拟机将所管理的内存划分成多个区域,其中方法区和堆是线程共享,Java栈、本地方法栈、程序计数器是线程私有。

  • 方法区:存储类信息、常量、静态变量、即时编译器编译后的代码等数据
  • 堆:存储Java对象
  • Java栈:主要存放局部变量表、操作数栈、帧数据
  • 程序计数器:当前线程所执行的字节码的行号指示器
  • 本地方法栈:与Java栈类似,存储本地方法调用的状态

4 执行引擎

执行引擎主要负责Java字节码的执行,执行的方式分为:

  • 解释执行
  • 编译执行
  • 自适应优化执行