JVM基础之--JVM体系结构

132 阅读3分钟

  在开始学习Java虚拟机之前,我们需要先了解一下Java虚拟机的体系结构,本章节主要针对HotSpot虚拟机,对JVM整体的体系结构,做一个简单的介绍,后续详细的内容,会在专栏持续更新。

  在介绍每个部分之前,先了解一下JVM体系结构图,如下图所示:

image.png JVM大体上可以分为四个部分,分别是:

  • 类加载子系统
  • 运行时数据区
  • 执行引擎
  • 本地方法接口

类加载子系统

  类加载子系统顾名思义,就是将Java源文件编译后的class文件中所需要使用到的类加载到JVM中,类加载器通过class文件开头的一个特定文件标识符(CAFE BABE)来识别class文件,类加载器一般只负责class文件的加载,至于是否可以运行,由执行引擎来决定。被加载的类信息存放于方法区的内存空间,除了类信息以外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量,这部分常量信息是class文件中常量池部分的内存映射。

  类加载器的加载步骤如下图所示,在专栏后面还会进行进一步的介绍。

image.png

运行时数据区

  运行时数据区是JVM对内存的区域划分和管理机制,不同的JVM对内存的局域划分和管理机制存在部分差异,在HotSpot虚拟机中,内存布局结构图,也就是运行时数据区的结构图如下所示:

image.png

运行时数据区主要分为五个部分,分别为:

  • 方法区
  • Java虚拟机栈
  • 程序计数器(PC寄存器)
  • 本地方法栈

每个部分都有每个部分的职能,其中,方法区 和 堆 是线程共享的,而 Java虚拟机、程序计数器 和 本地方法栈 是线程私有的。

执行引擎

  区别于物理机的执行引擎,JVM中执行引擎是由软件自行实现的,可以不受物理条件限制地制定指令集与执行引擎的结构体系,能够执行不被硬件直接支持的指令集。

  JVM执行引擎的主要作用就是将字节码指令解析并编译为对应平台上的本地机器码,可以将JVM执行引擎当作是将高级语言翻译为机器语言的翻译者。

JVM执行引擎内部结构图如下:

image.png

执行引擎内部主要分为三个部分,分别为:

  • 解释器
  • 即时编译器
  • 垃圾回收器

本地方法接口&本地方法库

本地方法接口和本地方法库是JVM为Java代码调用非Java代码(比如C语言)提供的访问接口,一个本地方法就是代表一个接口,这些方法并非Java语言编写,在Java代码中,本地方法使用native关键字修饰,不提供实现体。

image.png