【发布时间】:2013-03-07 12:06:28
【问题描述】:
我对 Java 字节码还很陌生。我正在使用 BCEL 生成字节码,但是当我尝试使用生成的代码时收到一条错误消息。 (事后看来,ObjectWeb ASM 似乎比 BCEL 更先进、更常用。)
这是错误信息:
Exception in thread "main" java.lang.VerifyError:
(class: cb/io/FileDescriptor, method: set
signature: (I)J)
Stack size too large
方法如下:
// Method descriptor #4 (I)J
// Stack: 0, Locals: 1
private static long set(int arg1);
0 lconst_0
1 lreturn
Local variable table:
[pc: 0, pc: 2] local: arg1 index: 0 type: int
据我了解,局部变量表是正确的,因为它与输入参数匹配。我没有添加“this”变量,因为该方法是静态的。
如果我没记错的话,lconst_0 会将一个 long 值 0 加载到堆栈中,然后 lreturn 会使用该值并返回它。
我做错了什么?这里有足够的信息可以说明吗?
谢谢!
【问题讨论】: