Есть ли какой-либо максимальный размер для кода в 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 может быть не более 64 КБ байт-кода.
Но вы должны убрать это!
Используйте файл .properties
для хранения этих данных и загрузите его через java.util.Properties
. Вы можете сделать это, поместив файл .properties
в ваш путь к классам и используйте:
Properties properties = new Properties();
InputStream inputStream = getClass().getResourceAsStream("yourfile.properties");
properties.load(inputStream);
Это немного похоже на безумие. Разве вы не можете инициализировать массив, считывая значения из текстового файла или другого источника данных?
Как упоминалось в других ответах, для метода существует ограничение байт-кода в 64 КБ (по крайней мере, в java-компиляторе Sun)
Слишком мне было бы более разумно разбить этот метод на большее количество методов - каждый из которых назначает массиву определенные связанные вещи (возможно, имеет смысл использовать ArrayList для этого)
например. :
public void addArrayItems()
{
addSculptureItems(list);
...
}
public void addSculptureItems(ArrayList list)
{
list.add("sculptures");
list.add("stonesculpture");
}
В качестве альтернативы можно загрузить элементы из статического ресурса, если они исправлены, как в файле свойств
Согласно спецификации виртуальной машины Java , код метода не должен быть больше 65536 байт :
Значение элемента
code_length
должно быть меньше 65536.
Где ] code_length
определена в §4.7.3 Атрибут Code
:
code_length
: значение элементаcode_length
дает количество байтов в массиве кода для этого метода. Значение code_length должно быть больше нуля; массив кода не должен быть пустым.
code []
: массив кода дает фактические байты кода виртуальной машины Java, реализующего метод.
Существует ограничение на размер кода в 64К байт для метода
Сказав это, я должен согласиться с Ричардом; зачем вам нужен такой большой метод? Учитывая пример в ОП, достаточно файла свойств... или даже базы данных, если потребуется.
Попробуйте провести рефакторинг вашего кода. В Java есть ограничение на размер метода.