问题描述
我已经了解了tableswitch / lookupswitch的格式。 但是,填充0到3个字节的目的是什么?
解决方法
存在填充是出于历史原因。第一批Java虚拟机没有JIT编译,它们一一解释字节码指令。为了允许解释器直接从字节码流中读取32位偏移量,这些偏移量是32位对齐的-它们的地址是4字节的精确倍数。
RISC处理器(如SPARC,ARMv5和更早版本等)仅允许对齐的内存访问。例如。要使用一条CPU指令从内存中读取32位值,该地址必须为32位对齐。如果地址未对齐,则获取32位值需要进行4次8位内存读取,这当然要慢一些。
如今,优化不再有用。