我一直在学习java类格式,我只是想知道为什么有时候一个带有常量池条目的操作码会占用类文件中的两个字节,例如使用InvokeStatic,但是后来的操作代码如ldc和整数索引只占用类文件中的一个字节。这背后是否有任何模式,我问这是因为我正在编写一个简单的字节码操作库,我希望能够知道天气将一个常量池索引写成一个字节或一个短而不用硬编码每一个命令进入图书馆。
答案 0 :(得分:1)
是的,有一种模式:除ldc
之外的每条指令都采用两个字节的索引。
大概是字节码格式的设计者决定加载常量是如此常见的任务,他们应该为它提供更短的指令。