2017-01-05 4 views
1

Я собираюсь обновить установку tomcat с версии 6.0 до версии 8.5, а также модернизировать JVM с 6 по 8. Наш код Java теперь скомпилирован с java 6.Должен ли я всегда компилировать код Java с помощью последнего компилятора javac?

Я знаю, что запуск java-кода на последней JVM всегда является хорошей идеей с точки зрения производительности (не говоря уже о безопасности). Таким образом, некоторый код, скомпилированный с java 1.6, может работать быстрее на JVM 8 по сравнению с JVM 6.

Но как насчет компиляции? Получает ли кто-нибудь что-либо, компилируя код, написанный в java 6 с помощью компилятора java 8 (т. Е. Используются только функции java 6)? То есть код, написанный с целью компиляции с java 1.6, работает быстрее на JVM 8, когда код скомпилирован с java 8 (целевой 8), а не с java 6? Является ли байт-код из java 8 оптимизированным по сравнению с java 6?

И относительно целевого флага. Получается ли что-то, полученное путем компиляции кода java 6 с компилятором java 8, предназначенным для java 6 (когда код еще должен быть запущен на JVM 6), по сравнению с компиляцией кода с помощью компилятора java 6?

+1

Java компилируется, один раз, запускается в любом месте. После его компиляции вам не нужно повторно компилировать его, чтобы воспользоваться новейшей JVM. Вы можете взять JAR для версии 1.0.2 и запустить его на Java 9 JVM, и он будет использовать все последние оптимизации. –

ответ

1

Получено ли что-нибудь, полученное путем компиляции кода java 6 с компилятором java 8, предназначенным для java 6 по сравнению с компиляцией кода с помощью компилятора java 6?

No.

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

Любая оптимизация, которая может быть выполнена на байт-коде, произведенном javac, выполняется двигателем JIT после запуска вашего приложения.

Редактировать: Посмотрите на комментарий pveentjer, некоторые простые оптимизации (например, постоянное разрешение) выполняются javac. Но я все еще уверен, что ответ о различиях между 6 и 8 по-прежнему «нет».

+2

Существует не так много оптимизаций, примененных Javac; но есть некоторые: http://pveentjer.blogspot.com.tr/2017/01/final-static-boolean-jit.html – pveentjer

+0

Я этого никогда не замечал, мне интересно, когда это было введено. –

0

Как вы уже знаете, нет реальных требований для компиляции Java-кода с последними версиями языка. Это тебе решать.

Общие вопросов для рассмотрения:

  • проблемы совместимости с библиотеками зависимостей и каркасы
  • вопросов совместимости/неподдерживаемые бинарные версии на версиях целевой виртуальной машины Java
  • Известных характеристики (или другие улучшения) в новой Java версии.
  • Обратная совместимость - код, скомпилированный с более новой Java (например, 8), может не всегда выполняться на старой JVM (например, 6).

Я бы (и я призываю вас) проверить заметки о выпуске, чтобы узнать, какие изменения, улучшения, ограничения совместимости и т. Д. Вводятся в новой версии JVM.

+0

Привет @ Иван: Спасибо за ваш ответ. Я знаю, что не требуется обновлять компилятор, но есть ли увеличение производительности? – Vering