Как обойти ошибку «Метод слишком большой» в компиляции Java? - PullRequest
5 голосов
/ 07 июля 2010

У меня есть синтаксический анализатор, написанный на функциональном языке схемы bigloo, который мне нужно скомпилировать в класс Java.Весь синтаксический анализатор написан как одна функция.К сожалению, это приводит к тому, что компилятор JVM выдает предупреждение «Слишком большой метод», а затем выдает ошибку «far label in localvar».Есть ли какой-нибудь возможный способ обойти эту ошибку?Я где-то читал о опции DontCompileHugeMethods, она работает?Разделение функции не представляется мне подходящим вариантом :( !!

Ответы [ 4 ]

3 голосов
/ 07 июля 2010

Есть ли какой-нибудь возможный способ обойти эту ошибку?

Что ж, основная причина этой ошибки компилятора в том, что существуют жесткие ограничения в формате файлов байт-кода.В этом случае проблема заключается в том, что один метод может содержать не более 65536 байтов байтовых кодов.(См. JVM spec ).

Единственный обходной путь - разделить метод.

0 голосов
/ 07 июля 2010

Быстрый и грязный: назначьте все свои параметры переменным класса с тем же именем (вы должны переименовать свои параметры) в начале вашей функции и начните разбивать вашу функцию на части и помещать эти части в функции. Это должно гарантировать, что ваша функция будет в основном работать с той же семантикой.

Но это не приведет к хорошему коду!

0 голосов
/ 07 июля 2010

Ну, дело немного в другом здесь метод состоит только из одиночный вызов функции. Теперь это Функция имеет огромный список параметров ( весь парсер на самом деле !!). Так что я понятия не имею, как это разделить !!

Способ разделить такого зверя может быть:

  • определить объекты-держатели данных для ваших параметров (поместить наборы параметров в объекты в соответствии с онтологией вашей модели данных),
  • построить эти объекты-держатели данных в их собственном контексте
  • передать объекты параметров в функцию
0 голосов
/ 07 июля 2010

Разделить метод на связанные операции или разделить утилиты отдельно.

...