系列一里讲到了Java虚拟机和操作系统的体系结构差别,这一节就简单的讲一下Java虚拟机的内部体系结构
从上图可以看出,JVM包括四个模块,分别是
1.类装载子系统:在JVM启动或者运行时将需要的class加载到JVM中
2.执行引擎:负责执行class文件(不一定是文件)中的字节码指令
3.运行时数据区:JVM执行Java程序时,用于保存程序数据的内存区,该区被划分为若干个不同的数据区域模拟实际机器上的存储,记录和调度功能模块
4.本地方法接口:调用C或C++实现的本地方法的代码返回结果(暂时还不熟悉)
模块之间的相互协作如下图所示
我们知道,Java源码通过javac编译成class文件,class文件中存储的是字节码,这些字节码就构成了一系列的能被JVM执行的指令操作,所以在Java虚拟机体系中还有一个重要的组成部分,那就是指令集。
在操作系统中,指令集就是在CPU中用来计算和控制计算机系统的一套指令的集合,每一种新型的CPU在设计时都规定了一系列与其它硬件电路相配合的指令系统。
Java虚拟机可以看作是一台抽象的计算机。如同真实的计算机那样,它也有自己的指令集。Java 虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码(Opcode)
以及跟随其后的零至多个
代表此操作所需参数的操作数(Operands)
所构成。虚拟机中许多指令并不包含操作数,只有一个操作码。 如果忽略异常处理,那Java虚拟机的解释器使用下面这个伪代码的循环即可有效地工作:
do {
自动计算 PC 寄存器以及从 PC 寄存器的位置取出操作码;
if (存在操作数) 取出操作数;
执行操作码所定义的操作
} while (处理下一次循环);