笔记-Java基础字节码执行简介

    Java虚拟机的指令由一个字节长度的,代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都都不包含操作数,只有一个操作码。

   字节码指令集是一种具有鲜明特点,优劣势都很突出的指令集架构,由于限制了Java虚拟机操作码的长度为一个字节(0~255),这意味着指令集的操作码总数不可能超过256条:又由于Class文件格式放弃了编译后代码的操作数长度对齐,这就意味着虚拟机处理那些超过一个字节数据的时候,不得不在运行时从字节码中重构出具体数据的结构,如果要将一个16位长度的无符号整数使用两个无符号字节存储起来(将他们命名为byte1和byte2),那它们的值应该是这样的:

    (byte1<<8)|byte2

    这种操作在某种程度上会导致解释执行字节码时损失一些性能。但这样做的优势也非常明显,放弃了操作数长度对齐,就意味着可以省略很多填充和间隔符号;、高传输效率的设计是由Java语言设计之初面向网络、智能家电的技术背景锁决定的,并一直沿用至今。

猜你喜欢

转载自blog.csdn.net/helianus/article/details/92081574