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
RAM 内存,运行 RHEL 6。-Xmx1536M -server -XX:+UseG1GC
和-Xmx1536M -server -XX:+UseParallelGC
执行。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:
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)
7.14.0.Final
在 Java 11 中,G1 的平均改进为 16.1%,并行 GC 的平均改进为 4.5%。尽管并行 GC 面向吞吐量,而 G1 更侧重于低延迟垃圾收集,但 Java 11 中 G1 的显着改进导致直接比较这两种垃圾收集算法。有关各种 GC 算法之间差异的更多信息,请参阅这篇文章。
这表明并行 GC 仍然是 OptaPlanner 的首选 GC,因为对于使用 OptaPlanner 解决优化问题而言,吞吐量比 GC 引入的延迟更重要。
云平衡 | 机器重新分配 | 课程安排 | 考试安排 | 护士排班。 | 巡回赛 | ||||||
JDK | 200摄氏度 | 800摄氏度 | B1 | B10 | c7 | c8 | s2 | s3 | m1 | mh1 | nl14 |
Java 8 | 38,074 | 34,870 | 113,490 | 20,398 | 4,296 | 4,840 | 7,003 | 5,437 | 2,385 | 2,021 | 812 |
OpenJDK 11 | 41,753 | 41,282 | 166,676 | 20,363 | 4,473 | 5,466 | 8,157 | 5,927 | 2,772 | 2,536 | 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% |
使用 G1 垃圾收集器,几乎每个数据集都在 Java 11 上比 Java 8 有所改进。平均而言,仅通过切换到 Java 11 就有 16% 的改进。这种改进的可能解释是 JEP 307:G1 的并行完整 GC,在 Java 10 中引入。
云平衡 | 机器重新分配 | 课程安排 | 考试安排 | 护士排班。 | 巡回赛 | ||||||
JDK | 200摄氏度 | 800摄氏度 | B1 | B10 | c7 | c8 | s2 | s3 | m1 | mh1 | nl14 |
Java 8 | 54,990 | 52,514 | 122,611 | 13,382 | 4,821 | 5,880 | 8,775 | 6,170 | 3,234 | 2,682 | 880 |
OpenJDK 11 | 54,316 | 50,120 | 140,816 | 11,129 | 4,927 | 6,071 | 8,996 | 6,383 | 3,336 | 3,087 | 1,125 |
区别 | -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% 以上。
云平衡 | 机器重新分配 | 课程安排 | 考试安排 | 护士排班。 | 巡回赛 | ||||||
Java 11 | 200摄氏度 | 800摄氏度 | B1 | B10 | c7 | c8 | s2 | s3 | m1 | mh1 | nl14 |
OpenJDK 11 并行 GC | 54,316 | 50,120 | 140,816 | 11,129 | 4,927 | 6,071 | 8,996 | 6,383 | 3,336 | 3,087 | 1,125 |
OpenJDK 11 G1 GC | 41,753 | 41,282 | 166,676 | 20,363 | 4,473 | 5,466 | 8,157 | 5,927 | 2,772 | 2,536 | 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 的明显改进,但与并行 GC 相比,它对 OptaPlanner 在大多数数据集上的 GC 策略的益处较小。唯一的例外是 Machine Reassignment,它表明 G1 OptaPlanner 计算分数的速度提高了 83%。这也适用于 Java 8,如 Score calculation count per second with G1 GC 所示。
Java 11 带来了额外的改进,这些改进因不同的 OptaPlanner 示例和数据集而异。平均而言,使用并行 GC 时速度提高 4.5%,使用 G1 GC 时速度提高 16.1%。尽管 G1 GC 有了显着改进,但对于该基准测试中的大多数数据集,并行 GC 仍然更快。
标签2: Java教程地址:https://www.cundage.com/article/jcg-how-much-faster-is-java-11.html