百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

与 Java 17 相比,Java 21 究竟有多快?

ztj100 2025-01-17 14:39 74 浏览 0 评论

随着 Java 21 的发布已经进入了倒计时阶段,你可能想知道它与 Java 17 相比,有什么不同以及是否应该升级。基于此,开源软件公司 Timefold 进行了梳理与实测,借助自家的 Timefold Solver 工具分享了 Java 21 的真实运行情况(与 Java 17 相比)。

原文链接:https://timefold.ai/blog/2023/java-21-performance/

未经允许,禁止转载!

作者|Luká? Petrovicky

译者|Ric Guan 责编|屠敏

出品|CSDN (ID:CSDNnews)

首先,让我们先明确一些事情:

什么是 Java 21 以及如何获取它

Java 21 是 Java 平台的新版本,Java 平台是编写 Timefold Solver 的可靠编程语言。它带来了许多新功能,以及常见的问题修复和较小的改进。

Java 21 将于 2023 年 9 月 19 日全面发布,但你现在可以使用候选版本构建进行尝试。我们发现开始使用 Java 21 的最简单方法是使用 SDKMAN(https://sdkman.io/),我们也是这样做的。

与之前的 Java 17 一样,Java 21 是一个长期支持 (LTS) 版本;它会持续很长一段时间。因此,最好尽快开始使用它,看看它是否适合你。

对于 Timefold Solver 来说,这意味着确保整个代码库在 Java 21 上完美运行,并运行一些基准测试以确保我们的用户至少可以获得与以前相同的性能。让我们开始吧。

微基准测试

我们将从分数总监微基准开始,我们定期使用它来确定各种变化对约束流性能的影响。这些基准测试并不运行整个求解器;相反,他们只专注于求解器的分数计算部分。它们是使用 Java Microbenchmark Harness (JMH) 实现的,并且在许多 Java 虚拟机 (JVM) 分支中运行并进行了充分的预热。这让我们对结果充满信心。事实上,这些数字的误差幅度仅为±2%。

以下是 Java 21 与 Java 17 上的约束流性能:

大多数情况下,切换到 Java 21 时性能都会略有提高。“Conference Scheduling”基准测试是唯一的异常值,通过对求解器进行一些额外的工作,我们很可能也会提高该基准测试的性能。

应该注意的是,我们使用 ParallelGC 作为垃圾收集器 (GC) 运行这些基准测试,而不是默认的 G1GC。在这篇文章的后面,我们将解释原因。

现实世界的基准

现在我们已经看到了微基准,是时候将它们与现实世界的求解器性能进行比较了。这包括整个求解器,而不仅仅是分数计算部分。

我们在 10 个不同的 JVM 分支中手动运行求解器,并使用中值计算速度。我们选择了可用基准的子集,以保持较短的运行时间;就所使用的启发法和所执行的代码路径而言,该选择代表了整个基准测试套件。再次使用ParallelGC作为垃圾收集器。结果如下:

这里没有什么惊喜。我们看到全面的性能小幅提升,证实了微基准测试的结果。与微基准相比,“Conference Scheduling”不再被视为异常值,这很有趣,并将作为我们调查可能的回归的另一个数据点。

由于我们尚未为这些大型基准建立正式的置信区间,因此我们无法肯定地说这些改进在统计上具有显性。 然而,运行之间观察到的波动足够小,因此足以让我们对结果充满信心。

为什么使用 ParallelGC ?

在我们使用 Timefold Solver 及其前身 OptaPlanner 的这些年里,我们发现 ParallelGC 是该求解器的最佳垃圾收集器。这应该不足为奇 - ParallelGC 是为高吞吐量而定制的,并且求解器是 100% CPU 限制的。相反,G1GC(默认垃圾收集器)是为低延迟量身定制的,这会产生相当大的差异。然而,事情会发生变化,我们有时需要挑战我们的假设。ParallelGC 仍然是求解器的最佳 GC 吗?

下图展示了G1GC(基线)和ParallelGC之间的性能差异。由于 Java 21 引入了分代 ZGC,这是另一种旨在低延迟的 GC,我们认为将其也包含在内也会很有趣。

结果(通过之前的微基准测试获得)很清楚:

  • ParallelGC 仍然是求解器的最佳 GC。

  • G1GC 位居第二,但速度要慢得多。

  • ZGC 是三者中迄今为止最差的。

如果我们增加 JVM 可用的堆大小,情况可能会改变,因为 ParallelGC 不能很好地扩展大堆,使用 -Xmx1G 时,它是明显的赢家。

结论

在这篇文章中,我们展示了:

  • Timefold Solver 1.1.0 与 Java 21 完美配合,无需任何更改。

  • 切换到 Java 21 可能会给您的 Timefold Solver 应用程序带来微小的性能改进,但您的效果可能会略有不同。

  • ParallelGC 仍然是求解器的最佳垃圾收集器。

我们鼓励您尝试 Java 21 并进行切换。毕竟它是免费的,你将能够享受最新、最好的 Java 平台。


相关推荐

Vue 技术栈(全家桶)(vue technology)

Vue技术栈(全家桶)尚硅谷前端研究院第1章:Vue核心Vue简介官网英文官网:https://vuejs.org/中文官网:https://cn.vuejs.org/...

vue 基础- nextTick 的使用场景(vue的nexttick这个方法有什么用)

前言《vue基础》系列是再次回炉vue记的笔记,除了官网那部分知识点外,还会加入自己的一些理解。(里面会有部分和官网相同的文案,有经验的同学择感兴趣的阅读)在开发时,是不是遇到过这样的场景,响应...

vue3 组件初始化流程(vue组件初始化顺序)

学习完成响应式系统后,咋们来看看vue3组件的初始化流程既然是看vue组件的初始化流程,咋们先来创建基本的代码,跑跑流程(在app.vue中写入以下内容,来跑流程)...

vue3优雅的设置element-plus的table自动滚动到底部

场景我是需要在table最后添加一行数据,然后把滚动条滚动到最后。查网上的解决方案都是读取html结构,暴力的去获取,虽能解决问题,但是不喜欢这种打补丁的解决方案,我想着官方应该有相关的定义,于是就去...

Vue3为什么推荐使用ref而不是reactive

为什么推荐使用ref而不是reactivereactive本身具有很大局限性导致使用过程需要额外注意,如果忽视这些问题将对开发造成不小的麻烦;ref更像是vue2时代optionapi的data的替...

9、echarts 在 vue 中怎么引用?(必会)

首先我们初始化一个vue项目,执行vueinitwebpackechart,接着我们进入初始化的项目下。安装echarts,npminstallecharts-S//或...

无所不能,将 Vue 渲染到嵌入式液晶屏

该文章转载自公众号@前端时刻,https://mp.weixin.qq.com/s/WDHW36zhfNFVFVv4jO2vrA前言...

vue-element-admin 增删改查(五)(vue-element-admin怎么用)

此篇幅比较长,涉及到的小知识点也比较多,一定要耐心看完,记住学东西没有耐心可不行!!!一、添加和修改注:添加和编辑用到了同一个组件,也就是此篇文章你能学会如何封装组件及引用组件;第二能学会async和...

最全的 Vue 面试题+详解答案(vue面试题知识点大全)

前言本文整理了...

基于 vue3.0 桌面端朋友圈/登录验证+60s倒计时

今天给大家分享的是Vue3聊天实例中的朋友圈的实现及登录验证和倒计时操作。先上效果图这个是最新开发的vue3.x网页端聊天项目中的朋友圈模块。用到了ElementPlus...

不来看看这些 VUE 的生命周期钩子函数?| 原力计划

作者|huangfuyk责编|王晓曼出品|CSDN博客VUE的生命周期钩子函数:就是指在一个组件从创建到销毁的过程自动执行的函数,包含组件的变化。可以分为:创建、挂载、更新、销毁四个模块...

Vue3.5正式上线,父传子props用法更丝滑简洁

前言Vue3.5在2024-09-03正式上线,目前在Vue官网显最新版本已经是Vue3.5,其中主要包含了几个小改动,我留意到日常最常用的改动就是props了,肯定是用Vue3的人必用的,所以针对性...

Vue 3 生命周期完整指南(vue生命周期及使用)

Vue2和Vue3中的生命周期钩子的工作方式非常相似,我们仍然可以访问相同的钩子,也希望将它们能用于相同的场景。...

救命!这 10 个 Vue3 技巧藏太深了!性能翻倍 + 摸鱼神器全揭秘

前端打工人集合!是不是经常遇到这些崩溃瞬间:Vue3项目越写越卡,组件通信像走迷宫,复杂逻辑写得脑壳疼?别慌!作为在一线摸爬滚打多年的老前端,今天直接甩出10个超实用的Vue3实战技巧,手把...

怎么在 vue 中使用 form 清除校验状态?

在Vue中使用表单验证时,经常需要清除表单的校验状态。下面我将介绍一些方法来清除表单的校验状态。1.使用this.$refs...

取消回复欢迎 发表评论: