J2ME“字节码超过32K”

时间:2011-01-19 18:31:49

标签: java java-me

为什么在J2ME中编译Java文件时会出现此错误。 是因为广泛使用数组对象,因为我在Java文件中定义了许多数组对象?

2 个答案:

答案 0 :(得分:3)

它可能是方法中的数组初始值设定项,如:

void someMethod() {
    int[] array = {0, 1, 2, 3};
}

这相当于:

int[] array = new int[4];
array[0] = 0;
array[1] = 1;
array[2] = 2;
array[3] = 3;

并且每个元素赋值需要四个VM指令(每个元素的代码在4到12个字节之间。)

如果初始化程序太长,它将超过方法长度的32K限制。

答案 1 :(得分:0)

使用方法代码有32KB的限制,请注意不使用类文件大小。

简单代码

public void foo() {
    int arr[] = {1, 2, 3};
}

将变为[used javap以获得此结果]

public void foo();
  Code:
   0:   iconst_3
   1:   newarray int
   3:   dup
   4:   iconst_0
   5:   iconst_1
   6:   iastore
   7:   dup
   8:   iconst_1
   9:   iconst_2
   10:  iastore
   11:  dup
   12:  iconst_2
   13:  iconst_3
   14:  iastore
   15:  astore_1
   16:  return

所以你可以想象你的巨大& ocmplex数组会变成什么大小。

我建议您将数据移动到.jar文件中的外部资源中,它也会更好地压缩。也尝试优化它