为什么'a'是对象引用的Java字节码前缀?

时间:2013-09-27 00:59:12

标签: java bytecode instructions

特定于类型的Java字节码指令具有单字符前缀,用于指定与指令相关的类型。

enter image description here 取自Wikipedia's entry on Java bytecode

在每种情况下,前缀选择都是有意义的,由类型的第一个字母组成(布尔值除外,它没有指令前缀)。然而,对象引用前缀似乎不合逻辑,因为or(两个首字母)都是免费的。相反,对象引用指令使用a作为其前缀。

为什么对象引用字节码指令以a为前缀,而不是看似更合适的or

2 个答案:

答案 0 :(得分:3)

那张桌子值得怀疑。没有处理boolean的字节代码指令,因此没有以“z”开头的指令名称。 “z”可能来自Z代表boolean的类型签名,但与类型签名不同J代表longL开始一个班级名称。所以那里没有一致性。对于指令,“a”可能代表地址,因为astore指令也能够将返回地址存储到本地变量中。也许,在更早的时候,更多这些......指令能够处理除了对象以外的地址,并且以后受到限制。

答案 1 :(得分:1)

可能是因为r引用了JVM内部使用的类型returnAddress