Как оптимизируется «дублированный» Java-код компилятором JVM JIT? - PullRequest
7 голосов
/ 18 июня 2010

Я отвечаю за поддержку приложения на основе JSP, работающего в IBM WebSphere 6.1 (IBM J9 JVM).Все страницы JSP имеют статическую ссылку включения, и в этом файле включения есть несколько объявленных статических методов Java.Они включены во все страницы JSP, чтобы обеспечить «легкий доступ» к этим статическим методам утилит.Я знаю, что это очень плохой способ работать, и я работаю, чтобы изменить это.Но, просто для любопытства и для поддержки моих усилий по изменению этого, мне интересно, как эти "дублированные" статические методы оптимизируются JIT-компилятором JVM.точно такая же подпись?

Видит ли JIT-компилятор JVM, что все эти методы идентичны, и предоставляет "унифицированный" код JIT?

Ответы [ 3 ]

11 голосов
/ 18 июня 2010

Каждая страница JSP компилируется в уникальный класс, поэтому включенный код также будет компилироваться в отдельные классы. JIT не будет объединять различные копии кода в одну.

Чтобы избежать этого, вы можете поместить импортированный код в настоящий класс Java и импортировать его в JSP. Тогда дубликатов не будет, так как вы повторно используете один и тот же класс.

3 голосов
/ 18 июня 2010

@ mdma ответ верен для текущих JVM, но должен быть квалифицирован в двух отношениях.

  1. JIT в будущих JVM могут поддерживать агрессивную оптимизацию для уменьшения объема памятинативного кода.

  2. Обратная сторона в том, что, если у вас нет тысяч различных JSP, есть вероятность, что накладные расходы нескольких статических методов на класс JSP не приведут к большим затратам.разница в объеме памяти вашего веб-приложения.

0 голосов
/ 18 июня 2010

Вы можете использовать статический импорт из одного класса: <% @ page import = "static foo. *"%>.

Тогда у вас больше не будет этого дублирования.И, кроме импорта, вам не нужно ничего трогать.

...