“代码太大”在Java编译错误“代码太大”在Java编译错误(“Code too large” co

2019-05-09 05:30发布

是否有在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";  

而在编译时,我得到这个错误:代码太大

如何克服呢?

Answer 1:

在Java类的单一方法可能是在字节码的最64KB。

但你应该打扫一下!

使用.properties文件来存储这些数据,并通过加载java.util.Properties

您可以通过将做到这一点.properties文件在classpath中,并使用:

Properties properties = new Properties();
InputStream inputStream = getClass().getResourceAsStream("yourfile.properties");
properties.load(inputStream);


Answer 2:

有一个64K字节码大小限制上的方法

说到这里,我不得不同意瓦特/理查德; 为什么你需要一个方法大? 鉴于在OP的例子中,如果需要的属性文件,应该足够了...甚至数据库。



Answer 3:

按照Java虚拟机规范 ,一个方法的代码必须不大于65536个字节 :

该值code_length项目必须小于65536。

code_length定义在§4.7.3的Code属性 :

code_length :所述的值code_length项给出了代码阵列此方法中的字节数。 code_length的值必须大于零; 代码数组必须不能为空。

code[]代码阵列给出了实现该方法的Java虚拟机代码的实际字节。



Answer 4:

这似乎有点像疯狂。 你能不能从一个文本文件,或其他一些数据源读取值初始化数组?



Answer 5:

尝试重构你的代码。 有关于方法的Java中的大小限制。



Answer 6:

正如在其他的答案中提到有一种字节码限制一个64KB的方法(至少在Sun的Java编译器)

过我,它会更有意义,打破这种方法成多个方法 - 每次分配某些相关的东西数组(可能会更有意义使用ArrayList中做到这一点)

例如:

public void addArrayItems()
{
  addSculptureItems(list);
  ...
}

public void addSculptureItems(ArrayList list)
{
  list.add("sculptures");
  list.add("stonesculpture");
}

或者,如果他们是从一个属性文件固定喜欢你可以加载从静态资源项目



Answer 7:

我已经遇到这个问题我自己。 为我工作的解决方案是重构和收缩的方法,以更易于管理的部分。 和你一样,我处理了近10K线法。 然而,使用静态变量以及较小的模块化功能,问题就解决了。

似乎会有一个更好的解决办法,但使用Java 8,有没有...



Answer 8:

您可以添加另一种方法为您创造更多的数据空间代码空间,你可能有正在采取大量的数据空间的方法。 试着将你的方法,因为我有同样的问题,并在我的Java的Android代码创建另一个相同数据的另一种方法解决这个问题,我做了后,这个问题就消失了。



Answer 9:

此错误有时会出现由于过大的代码在一个单一的功能...为了解决这个错误,在多种功能拆分功能,如

//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();
}


文章来源: “Code too large” compilation error in Java