Улучшения производительности Java 6 связаны с JDK, JVM или с обоими?

StackOverflow https://stackoverflow.com/questions/93049

Вопрос

Мне интересно узнать об улучшениях производительности, заявленных в Java SE 6: они происходят в компиляторе или во время выполнения?Другими словами, увидит ли приложение Java 5, скомпилированное с помощью JDK 6, улучшение, работающее под JSE 5 (что указывает на улучшенную оптимизацию компилятора)?Увидит ли приложение Java 5, скомпилированное с помощью JDK 5, улучшение в JSE 6 (что указывает на улучшенную оптимизацию времени выполнения)?

Я заметил, что компиляция в JDK 6 занимает почти вдвое больше времени, чем в JDK 5, для той же самой кодовой базы;Я надеюсь, что хотя бы часть этого дополнительного времени будет потрачена на оптимизацию компилятора, что, надеюсь, приведет к повышению производительности JAR- и WAR-файлов.Информация Sun JDK на самом деле не содержит подробностей об улучшениях производительности, которые они внесли - я предполагаю, что это немного из столбца A и немного из столбца B, но мне интересно, что оказывает большее влияние.Кто-нибудь знает какие-либо тесты, проведенные на JDK 6 и JDK 6?JDK 5?

Это было полезно?

Решение

Я не слышал об улучшениях в компиляторе, но была опубликована обширная информация об улучшении производительности во время выполнения.

Руководство по миграции:

[http://java.sun.com/javase/6/webnotes/adoption/adoptionguide.html]

Технический документ по производительности:

[http://java.sun.com/ Performance/reference/whitepapers/6_ Performance.html]

Другие советы

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

Единственное существенное различие между сгенерированным кодом для версий 1.5 и 1.6 заключается в том, что с -target 1.6 добавляется дополнительная информация о состоянии стека, чтобы сделать проверку проще и быстрее (Java ME также делает это).Это влияет только на скорость загрузки классов.

Реальная часть оптимизации — это компилятор горячих точек, который компилирует байт-код в собственный код.Это даже обновляется в некоторых выпусках обновлений.В Windows по умолчанию в JRE распространяется только более медленная клиентская версия точки доступа C1.Точка доступа сервера C2 работает быстрее (используйте -server в командной строке Java), но медленнее запускается и использует больше памяти.

Также библиотеки и инструменты (включая javac) иногда проводят оптимизацию.

Я не знаю, почему вы считаете, что JDK 6 компилирует код медленнее, чем JDK 5.Есть ли какая-то тонкая разница в настройке?

Это почти 100% время выполнения.Хотя некоторые базовые приемы компиляции вполне могут быть реализованы в самом компиляторе Java, я не верю, что между Java 1.5 и 1.6 есть какие-либо существенные улучшения.

В новой виртуальной машине Java было много новых улучшений и оптимизаций.Таким образом, основная часть улучшения производительности, которую вы увидите, — это запуск Java с jvm версии 6.

Компиляция старого Java-кода с использованием Java 6 JDK, вероятно, даст более эффективный код, но основные улучшения заключаются в виртуальной машине, по крайней мере, это то, что я заметил.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top