特定于类型的Java字节码指令具有单字符前缀,用于指定与指令相关的类型。
取自Wikipedia's entry on Java bytecode
在每种情况下,前缀选择都是有意义的,由类型的第一个字母组成(布尔值除外,它没有指令前缀)。然而,对象引用前缀似乎不合逻辑,因为o
和r
(两个首字母)都是免费的。相反,对象引用指令使用a
作为其前缀。
为什么对象引用字节码指令以a
为前缀,而不是看似更合适的o
或r
?
答案 0 :(得分:3)
那张桌子值得怀疑。没有处理boolean
的字节代码指令,因此没有以“z”开头的指令名称。 “z”可能来自Z
代表boolean
的类型签名,但与类型签名不同J
代表long
和L
开始一个班级名称。所以那里没有一致性。对于指令,“a”可能代表地址,因为astore
指令也能够将返回地址存储到本地变量中。也许,在更早的时候,更多这些......指令能够处理除了对象以外的地址,并且以后受到限制。
答案 1 :(得分:1)
可能是因为r
引用了JVM内部使用的类型returnAddress
。