一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情。
Java[虚拟机]由五个部分组成:一组[指令集]、一组[寄存器]、一个栈、一个无用单元收集堆(Garbage-collected-heap)、一个方法区域。这五部分是Java虚拟机的逻辑成份,不依赖任何实现技术或组织方式,但它们的功能必须在真实机器上以某种方式实现。
指令集
Java[虚拟机]支持大约248个[字节码]。每个字节码执行一种基本的CPU运算,例如,把一个整数加到[寄存器],[子程序]转移等。Java[指令集](相当于Java程序的汇编语言。
Java指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0个或多个[操作数],提供操作所需的参数或数据。许多指令没有操作数,仅由一个单字节的操作符构成。
虚拟机的内层循环的执行过程如下:
do{
取一个操作符字节;
根据操作符的值执行一个动作;
}while(程序未结束)
由于[指令系统]的简单性,使得[虚拟机]执行的过程十分简单,从而有利于提高执行的效率。指令中[操作数]的数量和大小是由操作符决定的。如果操作数比一个[字节]大,那么它存储的顺序是高位字节优先。例如,一个16位的参数存放时占用两个字节,其值为:
第一个字节*256+第二个字节[字节码][指令流]一般只是[字节对齐]的。指令tabltch和lookup是例外,在这两条指令内部要求强制的4字节[边界对齐]。
寄存器
Java[虚拟机]的[寄存器]用于保存机器的运行状态,与微处理器中的某些专用寄存器类似。
Java虚拟机的寄存器有四种:
pc:Java[程序计数器]。
optop:指向[操作数]栈顶端的[指针]。
frame:指向当前执行方法的执行环境的指针。
vars:指向当前执行方法的[局部变量]区第一个变量的指针。