1

我正在使用 javassist,并在加载时/运行时生成接口和其他东西。

要调用接口的方法(使用字节码调用接口),我们必须提供几个参数:indexbyte1、indexbyte2、count 和 0(来自http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2。 doc6.html )。

已经有了我想调用的抽象方法(CtMethod),我该如何计算它的计数?

例如,在http://java.sun.com/docs/books/jvms/second_edition/html/Instructions2.doc6.html中,他们说“ invokeinterface 指令的计数操作数记录了参数值数量的度量,其中long 类型或 double 类型的参数值对计数值贡献两个单位,任何其他类型的参数贡献一个单位。此信息也可以从所选方法的描述符中得出。冗余是历史的

但也要说“计数操作数是一个不能为零的无符号字节。

如果我要调用的抽象方法没有参数,它将计数为 0!?但是count不能为0。方法的描述符是()V。

有什么建议么?

4

2 回答 2

1

我不知道 javaassist 的细节,但我假设计数是调用该方法所需的堆栈空间的大小。如果是这种情况,那么您需要为在任何参数之前被推入堆栈的“this”变量指定空间(因为您正在执行调用接口)。如果是这种情况,那么对于没有参数的方法,计数将为 1。

于 2011-03-28T02:55:02.343 回答
0

实例方法固有地消耗调用主题的堆栈字。

于 2011-03-29T14:30:33.423 回答