热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java11相对于Java8,OptaPlanner性能提升有多大?

本文通过基准测试比较了Java11和Java8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java11相对于Java8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。

go比java快多少

尽管大多数开发人员仍然使用Java 8 ,但Java 11还是在不久前发布的。 让我们看看其中哪个对OptaPlanner更快。 找出答案的最佳方法当然是运行OptaPlanner基准测试。 本文是我们针对Java 8的类似文章的后续文章 。

基准方法

为了运行基准测试,我们使用了:

  • 运行RHEL 6,运行2 x Intel® Xeon® CPU E5-2609 0 @ 2.4 GHz (8 cores total)31.3 GiB RAM内存的稳定机器,无需运行任何其他计算要求高的进程。
  • 两种Java版本的G1和Parallel 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度 800c B1 B10 c7 c8 s2 s3 m1 1小时 14天
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%的改进。对此改进的可能解释可能是Java 10中引入的JEP 307:用于G1的并行完整GC 。

云平衡 机器重新分配 课程安排 考试安排 护士名册 巡回赛
JDK 200度 800c B1 B10 c7 c8 s2 s3 m1 1小时 14天
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度 800c B1 B10 c7 c8 s2 s3 m1 1小时 14天
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%

尽管与并行GC相比,G1 GC在Java 8方面显示出明显的改进,但对于大多数数据集而言,OptaPlanner的GC策略效益较低。 唯一的例外是机器重新分配,这表明G1 OptaPlanner能够更快地计算分数计算83%。 这也适用于Java 8,如使用G1 GC的“分数计算每秒计数”所示。

结论

Java 11带来了其他改进,这些改进在不同的OptaPlanner示例和数据集之间有所不同。 平均而言,使用并行GC的速度要快4.5%,使用G1 GC的速度要快16.1%。 尽管G1 GC有了显着改进,但在此基准测试中,大多数数据集的并行GC仍然更快。

翻译自: https://www.javacodegeeks.com/2019/01/how-much-faster-is-java-11.html

go比java快多少



推荐阅读
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
author-avatar
zerosmall
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有