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