Перекрестная компиляция Java - преимущества последних JDK

Я поддерживаю Java-приложение, которое я всегда скомпилировал с использованием JDK 1.6, прежде чем распространять его, поскольку это минимальная версия, которую требует мое приложение. Я не использую никаких новых функций. Я не вижу смысла компилировать его в более поздней версии, или более старые JRE не смогут запускать его (то есть пользователей на Mac OSX, которые используют Java 1.6).

Теперь, когда в новостях недавно появилась информация о безопасности в отношении Java и исправлениях ошибок в более поздних версиях JDK, лучше ли перекрестно скомпилировать ее, используя последний JDK, доступный с использованием следующего синтаксиса:

javac -Xlint -source 1.6 -target 1.6 -bootclasspath jre6/lib/rt.jar MyClass.java

Это создает файл класса, который отлично работает в JRE 1.6, но есть ли преимущества в использовании JDK 1.6 в первую очередь? Использую ли я какие-либо оптимизации в новых JDK или создаю идентичный байт-код?

Ответ 1

Есть несколько моментов, которые вы должны учитывать:

  • Байт-код конкатенации строк несколько раз менялся. Это уже не ошибка для плохой производительности. Тем не менее, я не уверен, что это происходит из рефакторинга представления байт-кода или изменения виртуальной машины.
  • Старая (система) JDK/JRE может открывать угрозы безопасности на машине разработки. Если разработчик использует устаревшую JDK/JRE, он может быть уязвим для вредоносного программного обеспечения, которое он выполняет.
  • Устаревшая версия java на стороне клиента подвергает пользователя рискам безопасности. Если вы разрешаете пользователю использовать старую версию Java, они это сделают. Это может представлять угрозу безопасности.
  • Java 6 больше не поддерживается публикой. Проблема с безопасностью что пользователь не информирован о том, что его версия java должна быть обновлена, и он не принужден это делать. Имейте в виду, что Java находится в списке уязвимостей 3-го списка.
  • Вы можете использовать функции Java 1.7 при компиляции для цели 1.6.. Используя -source 1.7 и -target 1.6, вы можете использовать языковые функции, такие как int i = 0b011
  • Инструменты, поставляемые с вашим JDK, обновляются. Там могут быть новые инструменты для разработки java-приложения, например. в какой-то момент в JDK был добавлен java VisualVM.

Глядя на этот список, я думаю, что плюсы использования текущего JDK перевешивают преимущества использования старого.

ИЗМЕНИТЬ:  Я немного исследовал, и теперь я предлагаю установить JDK, который подходит для вашей целевой версии. В любом случае вам нужен JDK, когда вы выполняете кросс-компиляцию из-за пути загрузки bootstrap/ext. См. Как перекрестно скомпилировать более старые версии платформы для получения дополнительной информации. На этом сайте также указывается, что существуют различия в компиляции между разными JDK (от второго до последнего абзаца) и предлагается использовать JDK, относящийся к вашей целевой версии (последний абзац). Также актуальной может быть javac documentation.