解释JVM方法调用指令

时间:2015-05-29 10:51:45

标签: java jvm instructions

我知道下面的说明意味着已经进行了方法调用:

invokestatic:indexbyte1=00 indexbyte2=02 

我的理解是,要在被调用方法的常量池中找到索引,执行位移操作:

00 << 8 + 02

这等于零,这不是常量池索引中的有效条目。我误解了所需的计算吗?

我想了解这是如何手动完成的,因此反编译器无济于事。

1 个答案:

答案 0 :(得分:4)

索引不计算为00 << 8 + 02。引用the standard

  

unsigned indexbyte1和indexbyte2用于构造当前类(§2.6)的运行时常量池的索引,其中索引的值为(indexbyte1&lt;&lt; 8)| indexbyte2。

这意味着指令invokevirtual 00 02将调用其methodref位于constantpool中的索引(00 << 8) | 02的方法,即位置2.请记住,constantpool中的第一个条目具有索引1,所以index 2实际上是指池的第二个条目。