为什么在J2ME中编译Java文件时会出现这个错误。是不是因为我在Java文件中定义了很多数组对象,所以大量使用了数组对象?
发布于 2011-01-20 02:46:35
它可能是方法中的数组初始值设定项,如下所示:
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限制。
发布于 2011-01-20 02:48:11
方法代码有32KB的限制,请注意,类文件大小不受限制。
简单的代码
public void foo() {
int arr[] = {1, 2, 3};
}将变成[used javap to used this result]
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文件的外部资源中,它也会压缩得更好。也可以试着优化它
https://stackoverflow.com/questions/4739180
复制相似问题