Ошибка компиляции "слишком большой код" в Java



есть ли максимальный размер для кода в 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";


и при компиляции, я получаю эту ошибку: код слишком большой



Как мне преодолеть это?

872   9  

9 ответов:

один метод в классе Java может быть не более 64 КБ байт-кода.

но вы должны очистить это!

использовать .properties файл для хранения этих данных, и загрузить его через java.util.Properties

вы можете сделать это, поместив .properties файл на пути к классу, и использовать:

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

существует ограничение размера байт-кода 64K на метод

сказав это, я должен согласиться с Ричардом; зачем вам нужен такой большой метод? Учитывая пример в OP, файл свойств должен быть достаточным ... или даже базы данных, если требуется.

по словам спецификация виртуальной машины Java, a код метода не должен быть больше 65536 байт:

значение code_length элемент должен быть меньше, чем 65536.

здесь code_length определена в §4.7.3 в Code атрибут:

code_length: значение code_length item дает количество байтов в массиве кода для этого метода. Значение длина кода должна быть больше нуля; массив кода не должен быть пустым.

code[]: массив кода дает фактические байты кода виртуальной машины Java, которые реализуют метод.

Это немного похоже на безумие. Вы не можете инициализировать массив, читая значения из текстового файла или другого источника данных?

попробуйте рефакторинг кода. Существует ограничение на размер метода в Java.

Как уже упоминалось в других ответах, существует 64 КБ байт-кода для метода (по крайней мере, в Java-компиляторе Sun)

тоже мне было бы разумнее разбить этот метод на несколько методов - каждый назначает определенный связанный материал массиву (может иметь больше смысла использовать ArrayList для этого)

например:

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

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

в качестве альтернативы вы можете загрузить элементы из статического ресурса, если они фиксированы, как из файла свойств

Я сам столкнулся с этой проблемой. Решение, которое сработало для меня, было рефакторингом и сокращением метода до более управляемых частей. Как и вы, я имею дело с почти 10к методу. Однако с использованием статических переменных, а также меньших модульных функций проблема была решена.

кажется, что было бы лучше обходной путь, но с помощью 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();
}

Comments

    Ничего не найдено.