Java中的“代码太大”编译错误

Java中的代码是否有最大的大小? 我写了一个超过10,000行的函数。 实际上,每一行都将一个值赋给一个数组variables。

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文件放在您的类path中来执行此操作,并使用:

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

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

话虽如此,我必须同意理查德; 为什么你需要一个大的方法? 鉴于OP中的例子,一个属性文件应该足够了……如果需要的话甚至可以是一个数据库。

这似乎有点像疯狂。 你不能通过读取文本文件或其他数据源的值来初始化数组吗?

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

code_length项的值必须小于65536。

其中code_lengthcode_length定义Code属性 :

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

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

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

哇,那很糟糕。 硬编码数据在你的程序中从来就不是一个好主意。 硬编码一吨数据是不是更好,并导致你遇到其他答案中描述的限制。

有很多方法可以解决这个问题,但是下面不应该打破任何其他的代码。

 public static String[] getTheArrayThing(){ List<String> list = new LinkedList<String>(); try { BufferedReader br = new BufferedReader(new FileReader(<the file>)); String line = br.readLine(); while (line != null) { list.add(line); line = br.readLine(); } } catch (Exception e){ throw new IllegalStateException("Couldn't load array file"); } return list.toArray(new String[0]); } 

基本上,该方法创build(并返回,但它可以很容易地编辑一个类variables)一个数组,其中包含每个文件的顺序。

只需将您的源代码示例中的值(例如“newyorkartworld”)转储到文本文件中,然后使用它来加载数组。

虽然这个简单的替代scheme将会起作用,但是如果你能find时间来进行一些重构的话,那么就会有更加优雅的解决scheme。

正如其他答案中提到的那样,一个方法有64KB的字节码限制(至less在Sun的java编译器中)

对我来说,将这种方法分解成更多的方法会更有意义 – 每个方法都将相关的东西分配给数组(可能更有意义使用ArrayList来做到这一点)

例如:

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

或者,如果从属性文件修复它们,则可以从静态资源加载项目

您可以添加另一种方法为您的代码创build额外的数据空间空间,您可能有一个方法,正在占用大量的数据空间。 尝试分割你的方法,因为我有同样的问题,并通过在我的Android代码中为相同的数据创build另一个额外的方法来解决它,问题在我做了之后没有了。

我自己也遇到了这个问题。 为我工作的解决scheme是重构和缩小方法到更易于pipe理的部分。 像你一样,我正在处理近10K的线条方法。 但是,通过使用静态variables以及较小的模块化function,问题得以解决。

似乎有一个更好的解决方法,但使用Java 8,没有…

这个错误有时是由于单个函数中的代码太大而引起的。要解决这个错误,请将函数分成多个函数

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