Каковы последствия использования JAR со старым языковым уровнем в современном проекте? - PullRequest
0 голосов
/ 30 октября 2018

Я работаю в корпоративной среде с несколькими широко используемыми, редко обновляемыми библиотеками Java в своих репозиториях. Некоторые из библиотек довольно старые, и были скомпилированы с использованием языковых уровней еще в JDK 1.5 (Java 5).

Почти все наши активно разрабатываемые проекты Java используют Java 8 или новее, но они зависят от одного или нескольких JAR-уровней JDK 1.5.

Существуют ли потери производительности для использования JAR с очень старыми версиями байт-кода? Может ли современный JIT обновлять старый, неэффективный байт-код на лету?

1 Ответ

0 голосов
/ 30 октября 2018

Помните: Напишите один раз , бегите везде! В вашем случае слоган действительно подходит.

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

Байт-код не сильно изменился за эти годы, инструкции байт-кода, понятные JRE Java8, на 99% те же, что уже присутствовали в Java2 - было очень мало дополнений, поэтому с этой точки зрения нет необходимости обновить старый байт-код. В Java8 он будет работать даже быстрее, чем в Java5, поскольку JRE с его движком HotSpot и библиотека классов значительно улучшились.

Изменения в формате файла класса больше касаются метаданных, и номер версии файла класса также гарантирует, что вы не запускаете программу Java8 под JRE Java6, где отсутствует половина классов и методов Java.

Что сильно изменилось, так это библиотека классов Java и исходный язык. А поскольку старая библиотека не могла знать об изменениях, которые появятся позже, она может оказаться менее эффективной, чем недавно написанная версия, использующая все функции из более поздних выпусков Java. Но я предполагаю, что производительность, достигнутая за счет редизайна старых библиотек, не стоит усилий.

И, наконец, общий совет по вопросам производительности:

  • Если он не сломан, не исправляйте его (= не оптимизируйте, пока не узнаете, что у вас есть проблемы с производительностью).

  • Перед оптимизацией воспользуйтесь профилировщиком, чтобы выяснить, где находятся ваши узкие места. Поверьте мне, узкое место вряд ли когда-нибудь, где вы ожидаете.

...