是否有在Java代码中任何的最大尺寸? 我写了一个函数有超过10000行。 实际上,每条线分配一个值到一个数组变量。
arts_bag[10792]="newyorkartworld";
arts_bag[10793]="leningradschool";
arts_bag[10794]="mailart";
arts_bag[10795]="artspan";
arts_bag[10796]="watercolor";
arts_bag[10797]="sculptures";
arts_bag[10798]="stonesculpture";
而在编译时,我得到这个错误:代码太大
如何克服呢?
在Java类的单一方法可能是在字节码的最64KB。
但你应该打扫一下!
使用.properties
文件来存储这些数据,并通过加载java.util.Properties
您可以通过将做到这一点.properties
文件在classpath中,并使用:
Properties properties = new Properties();
InputStream inputStream = getClass().getResourceAsStream("yourfile.properties");
properties.load(inputStream);
有一个64K字节码大小限制上的方法
说到这里,我不得不同意瓦特/理查德; 为什么你需要一个方法大? 鉴于在OP的例子中,如果需要的属性文件,应该足够了...甚至数据库。
按照Java虚拟机规范 ,一个方法的代码必须不大于65536个字节 :
该值code_length
项目必须小于65536。
凡code_length
定义在§4.7.3的Code
属性 :
code_length
:所述的值code_length
项给出了代码阵列此方法中的字节数。 code_length的值必须大于零; 代码数组必须不能为空。
code[]
代码阵列给出了实现该方法的Java虚拟机代码的实际字节。
这似乎有点像疯狂。 你能不能从一个文本文件,或其他一些数据源读取值初始化数组?
尝试重构你的代码。 有关于方法的Java中的大小限制。
正如在其他的答案中提到有一种字节码限制一个64KB的方法(至少在Sun的Java编译器)
过我,它会更有意义,打破这种方法成多个方法 - 每次分配某些相关的东西数组(可能会更有意义使用ArrayList中做到这一点)
例如:
public void addArrayItems()
{
addSculptureItems(list);
...
}
public void addSculptureItems(ArrayList list)
{
list.add("sculptures");
list.add("stonesculpture");
}
或者,如果他们是从一个属性文件固定喜欢你可以加载从静态资源项目
我已经遇到这个问题我自己。 为我工作的解决方案是重构和收缩的方法,以更易于管理的部分。 和你一样,我处理了近10K线法。 然而,使用静态变量以及较小的模块化功能,问题就解决了。
似乎会有一个更好的解决办法,但使用Java 8,有没有...
您可以添加另一种方法为您创造更多的数据空间代码空间,你可能有正在采取大量的数据空间的方法。 试着将你的方法,因为我有同样的问题,并在我的Java的Android代码创建另一个相同数据的另一种方法解决这个问题,我做了后,这个问题就消失了。
此错误有时会出现由于过大的代码在一个单一的功能...为了解决这个错误,在多种功能拆分功能,如
//Too large code function
private void mySingleFunction(){
.
.
2000 lines of code
}
//To solve the problem
private void mySingleFunction_1(){
.
.
500 lines of code
}
private void mySingleFunction_2(){
.
.
500 lines of code
}
private void mySingleFunction_3(){
.
.
500 lines of code
}
private void mySingleFunction_4(){
.
.
500 lines of code
}
private void MySingleFunction(){
mySingleFunction_1();
mySingleFunction_2();
mySingleFunction_3();
mySingleFunction_4();
}