热门标签 | 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快多少



推荐阅读
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
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社区 版权所有