Улучшения производительности Java 6 в JDK, JVM или в обоих? - PullRequest
3 голосов
/ 18 сентября 2008

Мне было интересно узнать об улучшениях производительности, которые рекламируются в 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 5?

Ответы [ 4 ]

7 голосов
/ 18 сентября 2008

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

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

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

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

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

3 голосов
/ 18 сентября 2008

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

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

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

Технический документ:

[http://java.sun.com/performance/reference/whitepapers/6_performance.html]

1 голос
/ 18 сентября 2008

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

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

1 голос
/ 18 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...