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



推荐阅读
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 如何高效解决Android应用ANR问题?
    本文介绍了ANR(应用程序无响应)的基本概念、常见原因及其解决方案,并提供了实用的工具和技巧帮助开发者快速定位和解决ANR问题,提高应用的用户体验。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • MySQL InnoDB 存储引擎索引机制详解
    本文深入探讨了MySQL InnoDB存储引擎中的索引技术,包括索引的基本概念、数据结构与算法、B+树的特性及其在数据库中的应用,以及索引优化策略。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • java类名的作用_java下Class.forName的作用是什么,为什么要使用它?
    湖上湖返回与带有给定字符串名的类或接口相关联的Class对象。调用此方法等效于:Class.forName(className,true,currentLoader) ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
  • 本文介绍了如何在两个Oracle数据库(假设为数据库A和数据库B)之间设置DBLink,以便能够从数据库A中直接访问和操作数据库B中的数据。文章详细描述了创建DBLink前的必要准备步骤以及具体的创建方法。 ... [详细]
  • 本文探讨了Java中线程的多种终止方式及其状态转换,提供了关于如何安全有效地终止线程的指导。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
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社区 版权所有