Java 11 性能测试快多少?

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(284)   2023-06-26 07:54:18

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。
  • 两个 Java 版本的 G1 和并行 GC 比较垃圾回收的影响。 Java分别以参数-Xmx1536M -server -XX:+UseG1GC-Xmx1536M -server -XX:+UseParallelGC执行。
  • Oracle Java 8:
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)
  • OptaPlanner 7.14.0.Final
  • 解决规划问题不涉及 IO(启动期间加载输入的几毫秒除外)。 单个 CPU 完全饱和。它不断创建许多短暂的对象,然后 GC 收集它们。
  • 每次运行都使用 OptaPlanner 解决 11 个规划问题。每个规划问题运行 5 分钟,并以 30 秒的 JVM 预热开始,该预热被丢弃。
  • 基准衡量每毫秒计算的分数数。越高越好。为提议的规划解决方案计算分数并非易事:它涉及许多计算,包括检查每个实体与每个其他实体之间的冲突。

执行摘要

在 Java 11 中,G1 的平均改进为 16.1%,并行 GC 的平均改进为 4.5%。尽管并行 GC 面向吞吐量,而 G1 更侧重于低延迟垃圾收集,但 Java 11 中 G1 的显着改进导致直接比较这两种垃圾收集算法。有关各种 GC 算法之间差异的更多信息,请参阅这篇文章。

这表明并行 GC 仍然是 OptaPlanner 的首选 GC,因为对于使用 OptaPlanner 解决优化问题而言,吞吐量比 GC 引入的延迟更重要。

结果

Java 8 对比Java 11

云平衡 机器重新分配 课程安排 考试安排 护士排班 巡回赛
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 上的并行 GC 与 G1 GC

云平衡 机器重新分配 课程安排 考试安排 护士排班 巡回赛
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

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...