Java 11 была выпущена некоторое время назад, хотя большинство разработчиков остаются на Java 8 . Давайте посмотрим, какой из них быстрее для OptaPlanner . Лучший способ узнать это, конечно, запустить тесты OptaPlanner. Эта статья является продолжением нашей аналогичной статьи для Java 8 .
Методология сравнения
Для запуска теста мы использовали:
- Стабильная машина без каких-либо других требующих вычислительных процессов процессов и с
2 x Intel® Xeon® CPU E5-2609 0 @ 2.4 GHz (8 cores total)
и31.3 GiB
ОЗУ оперативной памяти с RHEL 6. - И G1, и Parallel GC для обеих версий Java для сравнения влияния сборки мусора. Java выполняется с параметрами
-Xmx1536M -server -XX:+UseG1GC
и-Xmx1536M -server -XX:+UseParallelGC
соответственно. - Оба Oracle Java 8:
1
2
3
|
java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8 .0_191-b12) Java HotSpot(TM) 64 -Bit Server VM (build 25.191 -b12, mixed mode) |
и OpenJDK 11:
1
2
3
|
openjdk version "11.0.1" 2018 - 10 - 16 OpenJDK Runtime Environment 18.9 (build 11.0 . 1 + 13 ) OpenJDK 64 -Bit Server VM 18.9 (build 11.0 . 1 + 13 , mixed mode) |
- OptaPlanner
7.14.0.Final
- Решение проблемы планирования не требует ввода-вывода (за исключением нескольких миллисекунд во время запуска для загрузки ввода). Один процессор полностью насыщен. Он постоянно создает много недолговечных объектов, и GC собирает их впоследствии.
- Каждый прогон решает 11 проблем планирования с OptaPlanner. Каждая проблема планирования длится 5 минут и начинается с 30-секундного прогрева JVM, который отбрасывается.
- Тесты измеряют количество баллов, рассчитанных за миллисекунду. Чем выше, тем лучше. Расчет баллов для предлагаемого решения по планированию нетривиален: он включает в себя множество вычислений, в том числе проверку на конфликты между каждым объектом и любым другим объектом.
Управляющее резюме
В Java 11 среднее улучшение составляет 16,1% для G1 и 4,5% для Parallel GC. Хотя Parallel GC ориентирован на пропускную способность, в то время как G1 фокусируется скорее на сборке мусора с малой задержкой, значительное улучшение G1 в Java 11 приводит к прямому сравнению этих двух алгоритмов сборки мусора . Для получения дополнительной информации о разнице между различными алгоритмами GC, пожалуйста, смотрите эту статью .
Это показывает, что Parallel GC по-прежнему является предпочтительным GC для OptaPlanner, поскольку пропускная способность гораздо важнее для решения задач оптимизации с помощью OptaPlanner, чем задержки, введенные GC.
Полученные результаты
Java 8 против Java 11
Балансировка облаков | Переназначение машины | Планирование курса | Расписание экзаменов | Медсестра работает . | Турнир по путешествиям | ||||||
JDK | 200c | 800c | B1 | B10 | c7 | с8 | s2 | s3 | m1 | MH1 | nl14 |
Java 8 | 38074 | 34870 | 113490 | 20398 | 4296 | 4840 | 7003 | 5437 | 2385 | 2021 | 812 |
OpenJDK 11 | 41753 | 41282 | 166676 | 20363 | 4473 | 5466 | 8157 | 5927 | 2772 | 2536 | +957 |
разница | 9,7% | 18,4% | 46,9% | -0,2% | 4,1% | 12,9% | 16,5% | 9,0% | 16,2% | 25,5% | 17,9% |
Средний | 16,1% |
Почти каждый набор данных улучшается в Java 11 по сравнению с Java 8 с помощью сборщика мусора G1. В среднем, улучшение происходит на 16% только благодаря переходу на Java 11. Возможным объяснением этого улучшения может быть JEP 307: Parallel Full GC для G1 , представленный в Java 10.
Балансировка облаков | Переназначение машины | Планирование курса | Расписание экзаменов | Медсестра работает . | Турнир по путешествиям | ||||||
JDK | 200c | 800c | B1 | B10 | c7 | с8 | s2 | s3 | m1 | MH1 | nl14 |
Java 8 | 54990 | 52514 | 122611 | 13382 | 4821 | 5880 | 8775 | 6170 | 3234 | 2682 | 880 |
OpenJDK 11 | 54316 | 50120 | 140816 | 11129 | 4927 | 6071 | 8996 | 6383 | 3336 | 3087 | 1125 |
разница | -1,2% | -4,6% | 14,8% | -16,8% | 2,2% | 3,2% | 2,5% | 3,5% | 3,2% | 15.1% | 27,8% |
Средний | 4,5% |
С параллельным сборщиком мусора результаты менее определенны, чем G1. У некоторых наборов данных есть улучшения, в то время как другие остаются нетронутыми или даже показывают снижение производительности. Однако в среднем Java 11 работает более чем на 4% лучше.
Параллельный GC vs. G1 GC на Java 11
Балансировка облаков | Переназначение машины | Планирование курса | Расписание экзаменов | Медсестра работает . | Турнир по путешествиям | ||||||
Java 11 | 200c | 800c | B1 | B10 | c7 | с8 | s2 | s3 | m1 | MH1 | nl14 |
OpenJDK 11 Parallel GC | 54316 | 50120 | 140816 | 11129 | 4927 | 6071 | 8996 | 6383 | 3336 | 3087 | 1125 |
OpenJDK 11 G1 GC | 41753 | 41282 | 166676 | 20363 | 4473 | 5466 | 8157 | 5927 | 2772 | 2536 | +957 |
разница | -23,1% | -17,6% | 18,4% | 83,0% | -9,2% | -10,0% | -9,3% | -7,1% | -16,9% | -17,8% | -14,9% |
Средний | -2,3% |
Хотя G1 GC демонстрирует явное улучшение по сравнению с Java 8, по сравнению с Parallel GC это менее выгодная стратегия GC для OptaPlanner для большинства наборов данных. Единственное исключение — переназначение машины, которое показывает, что G1 OptaPlanner может вычислить счет на 83% быстрее. Это относится и к Java 8, как показано в подсчете подсчета очков в секунду с G1 GC .
Вывод
Java 11 приносит дополнительные улучшения, которые различаются в разных примерах OptaPlanner и наборах данных. В среднем это на 4,5% быстрее при использовании Parallel GC и на 16,1% быстрее с G1 GC. Несмотря на значительное улучшение G1 GC, Parallel GC все еще быстрее для большинства наборов данных в этом тесте.
Смотрите оригинальную статью здесь: Насколько быстрее Java 11? Мнения, высказанные участниками Java Code Geeks, являются их собственными. |