Достигнуто ограничение в 65536 байт - PullRequest
1 голос
/ 06 мая 2011

Я собираюсь поработать над этим отвратительным старым Java-приложением, которое мой друг унаследовал некоторое время назад.

После того, как я настроил tomcat, импортировал проект и все это в свою рабочую область eclipse, я получаю эту ошибку, что метод в сервлете превышает ограничение 65536 байт.

Метод вполне может превысить этот предел, он составляет несколько тысяч loc. Но дело в том, что я раньше работал над этим приложением, не получая этой ошибки, и, согласно журналам фиксации, с тех пор ни один код не был добавлен в сервлет.

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

Могу ли я что-нибудь сделать, кроме рефакторинга кода?

Ответы [ 4 ]

6 голосов
/ 06 мая 2011

Могу ли я что-нибудь сделать, кроме рефакторинга кода?

Нет.Рефакторинг кода.Ни один метод не должен быть таким длинным.Когда-либо. Напишите небольшие методы!

Серьезно: любая имеющаяся IDE проведет вас через рефакторинг, но это нужно сделать.Вы также можете прочитать Рефакторинг: Улучшение дизайна существующего кода для руководства.

1 голос
/ 06 мая 2011

Если код генерируется страницей JSP, он может превышать предел метода 64k . Некоторые веб-контейнеры, такие как Weblogic, могут решить эту проблему для вас. Tomcat не будет, возможно, вы использовали другой веб-контейнер раньше? Чтобы обойти проблему , эта страница предлагает изменить ваши статические включения следующим образом:

<%@ include file="test.jsp" %>

К динамическим включает как это:

<jsp:include page="test.jsp" /> 

Обновление : поскольку вы имеете дело с сервлетом, вам, вероятно, не повезло. Это ограничение спецификации JVM, см. Почему Java ограничивает размер метода 65535 байт? Я не верю, что вы найдете компилятор, который его обходит. Вы могли бы везти с ProGuard , чтобы минимизировать скомпилированный размер.

1 голос
/ 06 мая 2011

Какой процессор вы используете, не имеет значения. Скорее всего, тот компилятор, который вы сейчас используете, производит другой вывод (который превышает ограничение).

Я бы определенно рефакторил, но вы можете попробовать переключиться на тот же компилятор, который вы использовали в последний раз, когда компилировали код.

0 голосов
/ 06 мая 2011

Одна вещь, которая может сделать метод меньше, это отключить отладку.Когда отладка включена, каждая строка (с кодом) имеет оператор, который помечает строку.

...