java虚拟机

421 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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:指向当前执行方法的[局部变量]区第一个变量的指针。