可以归纳为如下四个部分:
- 类加载器(Class Loader):把描述类的数据从 Class 文件加载到内存,除了启动类加载器是 Java 虚拟机的一部分以外,其他的类加载器是被放到 Java 虚拟机外部去实现的,以便让应用程序自己决定如何去获取所需要的类。
- 运行时数据区域(Runtime Data Area):Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。运行时数据区域主要有 Java 虚拟机栈(VM Stack)、本地方法栈(Native Method Stack)、程序计数器(Program Counter Register)、堆(Heap)、方法区(Method Area)这五个部分,其中前三个是线程私有的,后两个是线程共享的。
- 执行引擎(Execution Engine):执行引擎是 Java 虚拟机最核心的组成部分之一。“虚拟机” 是一个相对于 “物理机” 的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。我们可以把执行引擎就理解为 Java 语言的解释器,负责将字节码解析成机器码。
- 本地方法接口(Native Interface):融合不同开发语言的原生库为 Java 所用。本着不重复造轮子的原则,如果其它语言已经实现好了,就不用再写一遍相同的东西了。