Java中的"代码太大"编译错误

tri*_*ity 85 java arrays compiler-errors code-size

Java中的代码是否有任何最大大小?我写了一个超过10,000行的函数.实际上,每一行都为数组变量赋值.

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"; 
Run Code Online (Sandbox Code Playgroud)

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

我该如何克服这个问题?

Boz*_*zho 86

Java类中的单个方法最多可以是64KB的字节码.

但你应该清理它!

使用.properties文件存储此数据,并通过它加载java.util.Properties

您可以通过将.properties文件放在类路径上来执行此操作,并使用:

Properties properties = new Properties();
InputStream inputStream = getClass().getResourceAsStream("yourfile.properties");
properties.load(inputStream);
Run Code Online (Sandbox Code Playgroud)

  • 我没有使用你的建议,虽然我很想下次尝试..现在已经使用数据库来存储这些信息,并相应地修改了其余的代码.. (3认同)
  • "无论JDK/JVM的实际大小是什么"?您是否暗示此限制未得到修复?因为它是由类文件格式规范修复和要求的. (2认同)

Eve*_*one 13

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

话虽如此,我必须同意理查德; 为什么你需要一个大的方法?给定OP中的示例,属性文件应该足够......或者甚至是数据库(如果需要).

  • 枚举怎么样?我得到大量枚举的相同问题 (3认同)

Joa*_*uer 13

根据Java虚拟机规范,方法的代码不得大于65536字节:

该项的值code_length必须小于65536.

code_length在定义§4.7.3的Code属性:

code_length:code_lengthitem 的值给出了此方法的代码数组中的字节数.code_length的值必须大于零; 代码数组不能为空.

code[]:代码数组给出实现该方法的Java虚拟机代码的实际字节数.


Ric*_*dOD 9

这看起来有点疯狂.您是否可以通过读取文本文件或其他数据源中的值来初始化数组?

  • (之所以投票,是因为)至少需要一个理由,为什么这种技术不好。提出充分的理由并不容易。 (2认同)

Muh*_*ooq 5

由于单个函数中的代码太大,有时会发生此错误...要解决该错误,请将该函数拆分为多个函数,例如

//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();
}
Run Code Online (Sandbox Code Playgroud)