Максимальный размер метода Java - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть Java-файл с одним очень большим методом, он успешно компилируется, но после запуска выдает java.lang.ClassFormatError: Неверный метод. Длина кода 72521 в файле класса

Я изучаю файл спецификации vm JVM ограничивает максимальный размер метода 65536 байтами. Спецификация JVM упоминала об этом ограничении

Есть ли способ обойти это?

Ответы [ 4 ]

8 голосов
/ 05 сентября 2011

Конечно, разделите ваш метод на более мелкие!

5 голосов
/ 05 сентября 2011

Вероятно, вам следует разделить ваш метод на два или более суб-методов, которые вы вызываете последовательно из основного. На самом деле, это должно быть гораздо больше, чем два. Инкапсуляция вашего кода в несколько методов сделает его намного проще для понимания, чем один метод длины Диккенса. И, может быть, вы сможете использовать их в другом месте.

Если вы абсолютно не можете разбить свой метод, может быть, вы могли бы попробовать удалить посторонние пробелы? Это называется minification , и, вероятно, есть утилита, которая сделает это для Java. Все это с оговоркой, что это сделает ваш эпический метод еще менее читабельным, поэтому не делайте этого, если вы захотите изменить его в будущем.

В связанной заметке, поздравляю с тем, что вы написали метод так долго, что вы сломали Java. Это действительно впечатляет.

3 голосов
/ 05 сентября 2011

Нет, не без компиляции вашей собственной версии JVM для использования целых чисел большего размера для хранения индексов / атрибутов, которые в настоящее время ограничивают ее.Тогда я подозреваю, что вам понадобится ваша пользовательская версия JDK, которая скомпилирует ее.И после всего этого ваша программа будет работать только на вашей взломанной JVM.

На самом деле нет никакой причины, по которой вам нужен какой-то один такой большой метод.

1 голос
/ 07 апреля 2012

Я испытал это на серверном программном обеспечении, пытаясь поиграться с профилированием -Xrunhprof.В последней сборке jre7 на 64-битной win7 -Xrunhprof сделал немного магии, которая сделала метод слишком большим.

...