Есть ли максимальный размер кода на 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";
И при компиляции я получаю такую ошибку: слишком большой код
Как мне это преодолеть?
java
arrays
compiler-errors
code-size
троица
источник
источник
Ответы:
Но вы должны это очистить!
Используйте
.properties
файл для хранения этих данных и загрузите его черезjava.util.Properties
Вы можете сделать это, поместив
.properties
файл в свой путь к классам и используя:Properties properties = new Properties(); InputStream inputStream = getClass().getResourceAsStream("yourfile.properties"); properties.load(inputStream);
источник
Для метода существует ограничение на размер байтового кода 64 КБ.
Сказав это, я должен согласиться с Ричардом; зачем вам такой большой метод? Учитывая пример в OP, файла свойств должно хватить ... или даже базы данных, если требуется.
источник
enum
чтобы увидетьСогласно спецификации виртуальной машины Java , код метода не должен превышать 65536 байт :
code_length
определяет размерcode[]
атрибута, который содержит фактический байт-код метода:источник
Это немного похоже на безумие. Можете ли вы инициализировать массив, прочитав значения из текстового файла или другого источника данных?
источник
Эта ошибка иногда возникает из-за слишком большого кода в одной функции ... Чтобы решить эту ошибку, разделите эту функцию на несколько функций, например
//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(); }
источник
Попробуйте реорганизовать свой код. В 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. Проблема исчезла после того, как я это сделал.
источник
У меня есть перечисление, из-за которого размер файла .java превышает 500 КБ. Eclipse может его построить по какой-то причине; экспортированный из eclipse файл ant build.xml не может. Я изучаю это и обновлю этот пост.
источник
Поскольку существует ограничение на размер методов, и вы не хотите переделывать свой код в этот момент, возможно, вы можете разделить массив на 4-5 частей, а затем поместить их в разные методы. Во время чтения массива вызовите все методы в серии. Вы также можете вести счетчик, чтобы знать, сколько индексов вы проанализировали.
источник
это связано с тем, что весь код находится в решении для одного метода: создайте еще несколько небольших методов, тогда эта ошибка исчезнет
источник
хорошо, может быть, этот ответ слишком поздно, но я думаю, что этот способ лучше, чем другой, поэтому
например, у нас есть данные 1000 строк в коде
сломать их
private void rows500() { //you shoud write 1-500 rows here } private void rows1000() { you shoud write 500-1000 rows here }
для лучшей производительности поставьте «если» в код
if (count < 500) { rows500(); } else if (count > 500) { rows1000(); }
Надеюсь, этот код поможет вам
источник