我已经了解了表开关/查找开关的格式。但是,在0到3字节之间填充的目的是什么?
由于历史原因而存在填充。第一批Java虚拟机没有JIT编译,它们逐个解释字节码指令。为了允许解释器直接从字节码流中读取32位偏移量,偏移量是32位对齐的——它们的地址是4字节的整数倍。
RISC处理器(如SPARC、ARMv5及更早版本等(只允许对齐的内存访问。例如,要用单个CPU指令从内存中读取32位值,地址必须是32位对齐的。如果地址没有对齐,那么获得32位值需要四次8位内存读取,当然这会更慢。
如今,优化已不再有用。