Java 为什么JVM tableswitch/lookupswitch指令的格式有0到3个字节的填充?;

Java 为什么JVM tableswitch/lookupswitch指令的格式有0到3个字节的填充?;,java,jvm,bytecode,jvm-bytecode,Java,Jvm,Bytecode,Jvm Bytecode,我理解了表开关/查找开关的格式。 但是,0到3字节之间填充的目的是什么?填充的存在是出于历史原因。第一个Java虚拟机没有JIT编译,它们逐个解释字节码指令。为了允许解释器直接从字节码流读取32位偏移量,偏移量是32位对齐的-它们的地址是4字节的精确倍数 RISC处理器(如SPARC、ARMv5和更早版本等)只允许对齐内存访问。例如,要使用单个CPU指令从内存中读取32位值,地址必须是32位对齐的。如果地址未对齐,则获取32位值需要四次8位内存读取,这当然要慢一些 如今,优化不再有用。。不过,它

我理解了表开关/查找开关的格式。
但是,0到3字节之间填充的目的是什么?

填充的存在是出于历史原因。第一个Java虚拟机没有JIT编译,它们逐个解释字节码指令。为了允许解释器直接从字节码流读取32位偏移量,偏移量是32位对齐的-它们的地址是4字节的精确倍数

RISC处理器(如SPARC、ARMv5和更早版本等)只允许对齐内存访问。例如,要使用单个CPU指令从内存中读取32位值,地址必须是32位对齐的。如果地址未对齐,则获取32位值需要四次8位内存读取,这当然要慢一些

如今,优化不再有用。

。不过,它只对非常简单的口译员有用。