科技 > 操作系统 > 鸿蒙系统

毕昇 JDK:“传奇再现”华为如何打造 ARM 上最好用的 JDK?

151人参与 2024-08-04 鸿蒙系统

 

文章目录

  • 前言
  • 一、什么是毕昇 jdk?
    • 1.1、毕昇 jdk 发展历程
    • 1.2、毕昇 jdk 的支持架构
    • 1.3、毕昇 jdk、openjdk 和 oracle jdk 区别
  • 二、为什么要做毕昇 jdk?
    • 2.1、oracle jdk 授权方式发生变化
    • 2.2、高版本 jdk 有价值特性的渴望
    • 2.3、应用的定制化优化诉求
  • 三、毕昇 jdk 现状
    • 3.1、毕昇 jdk 研发现状
    • 3.2、毕昇 jdk 性能提升实例
  • 四、毕昇 jdk 的 gc 算法优化
    • 4.1、并行复制算法的概念
    • 4.2、架构对并行复制算法的影响
    • 4.3、并行复制算法的流程
    • 4.4、算法优化减少 membar 之 q&a
    • 4.5、g1、gc 的优化
    • 4.6、zgc 的优化
  • 五、jit 优化——sve 算法优化
    • 5.1、sve 算法优化相关介绍
    • 5.2、sve 算法优化成果
  • 六、软硬协同——鲲鹏 kae 硬件加速
  • 七、毕昇 jdk 还能带来什么价值?
  • 八、毕昇 jdk 的未来发展
    • 8.1、即将面世的功能
    • 8.2、未来方向
  • 九、如何获得毕昇 jdk 及帮助?
    • 9.1、jdk 8 的代码仓
    • 9.2、jdk 11 的代码仓
  • 总结

前言

不知道大家是否听说过亦或是使用过毕昇 jdk,是否从事 java 工作?是否从事 jvm 底层开发?绝大多数 java 开发者使用的都是 oracle 的 jdk 或者是 openjdk,本文我们将介绍华为的毕昇 jdk 以及我们所做的相关技术优化,希望能在除上述两者之外提供给大家新的选择。

在这里插入图片描述


一、什么是毕昇 jdk?

1.1、毕昇 jdk 发展历程

毕昇 jdk 是华为基于 openjdk 定制的开源版本,是一款高性能、可用于生产环境的 openjdk 发行版。稳定运行在华为内部 500 多个产品上,在华为内部广泛使用毕昇 jdk,团队积累了丰富的开发经验,解决了实际业务运行中遇到的多个疑难问题。如 crash 等相关问题,我们已经在内部解决。

1.2、毕昇 jdk 的支持架构

1.3、毕昇 jdk、openjdk 和 oracle jdk 区别

我们通过对比和分析毕昇 jdk、openjdk 和 oracle jdk,来帮助大家在挑选 jdk 时有更好的选择。

如下图所示,我们用蓝色的区域代表 openjdk,浅黄色和红色分别代表 oracle jdk 和毕昇 jdk。

在这里插入图片描述
以上图为参考,我们可以发现:

二、为什么要做毕昇 jdk?

2.1、oracle jdk 授权方式发生变化

在这里插入图片描述
注:以上数据来自 oracle 官网。

2.2、高版本 jdk 有价值特性的渴望

jdk 每六个月发行一次新版本,jdk 版本众多,不同功能/特性在不同 jdk 版本。程序员期望在最熟悉的 jdk 上尽可能多的使用高版本中有价值的特性。例如 g1 gc 在 jdk12 中引入了一个特性,把不使用的内存归还给操作系统,该特性在云场景中非常有价值,目前主流使用的还是 jdk8,自研 jdk 中 blckport 特性能快速满足需求。

2.3、应用的定制化优化诉求

应用在运行的硬件、场景有特殊的诉求,但这些诉求短期难以进入到社区。例如大数据应用在数学方面有较高诉请求,在自研 jdk 中可以针对数学计算做循环开展、指令优化等编译优化技术,加速计算。

三、毕昇 jdk 现状

3.1、毕昇 jdk 研发现状

3.2、毕昇 jdk 性能提升实例

我们通过在测试环境下运行毕昇 jdk 来分析其优势何在,测试环境如下:

我们通过比较在 specjbb 上的数据可以发现毕昇 jdk 在 critical 和 max 上均有较大的提升:critical 提升 55%,max 提升 16%。

在这里插入图片描述
另一方面,在 specjvm 上的数据虽然说与上面相比并不是特别明显,但是仍平均提升 4.6%。

在这里插入图片描述

四、毕昇 jdk 的 gc 算法优化

4.1、并行复制算法的概念

我们都知道复制是 gc 算法里面很重要的一部分,特别是对于新生代的复制:将 from 区中的活跃对象复制到 to 区中,串行复制算法是仅有一个线程负责这个事情,而这无法满足我们的需要。所以我们用到了并行复制算法,那么什么是并行复制算法呢?

在这里插入图片描述

在这里插入图片描述

4.2、架构对并行复制算法的影响

在这里插入图片描述

4.3、并行复制算法的流程

并行复制算法的流程图如下图所示:

在这里插入图片描述

在热点分析中,我们发现复制操作的 60% cpu 消耗在插入 memory barrier 上。

4.4、算法优化减少 membar 之 q&a

q:如果不插入 memory barrier,多个线程观察到内存不一致的情况,在什么情况下会引入问题?
a:

q:对于不需要复制成员变量的对象(例如:对象的成员变量全部是非引用类型;对象的成员变量其引用类型全部为null,对象本身是原始类型的数组),还有必要使用 memory barrier?
a: no!

q: 如何识别这些对象?
a:

通过对于并行复制算法的优化,我们分别在 specjbb 和 specjvm 达到了较好的预期成果,如下图所示:

在这里插入图片描述

4.5、g1、gc 的优化

针对 g1 full gc 优化,full gc 分为 4 个阶段,分别是:

compact 阶段一般是最为耗时的,涉及到内存数据的移动。那么 能否在允许一定浪费空间的前提下,对于活跃对象多的部分分区不移动或者少移动,从而提高算法效率? 我们对活跃对象作下图:

在这里插入图片描述
我们可以发现:

我们已经将相关代码贡献到社区,欢迎大家前往查看。

4.6、zgc 的优化

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

五、jit 优化——sve 算法优化

5.1、sve 算法优化相关介绍

sve(scalable vector extension)是 arm aarch64 架构的下一代 simd 指令集。

5.2、sve 算法优化成果

vectorapi 新增 node 全部贡献到上游社区,毕昇 jdk 目前暂未合入。到目前为止,sve一共向上游社区提交了 11 个patch,相关代码超过 3000 行。

public static float sumreductionimplement(float[] a, float[] b, float[] c, float[] d, float total) {
   
		for (int i = 0; i < a.length; i++) {
   
			d[i] = (a[i] * b[i]) + (a[i] * c[i]) + (b[i] * c[i]);
			total += d[i];
		}
		return total;
	}

优化之后的 neon 机器代码如下图所示:

在这里插入图片描述
优化之后的 sve 机器代码如下图所示:

在这里插入图片描述

六、软硬协同——鲲鹏 kae 硬件加速

在这里插入图片描述

七、毕昇 jdk 还能带来什么价值?

在这里插入图片描述

在开启 g1 uncommit 后,我们可以在下图中看到,在内存不使用的场景中会稳步下降:

在这里插入图片描述
而在实际的业务场景中,效果更是显而易见的,如下图所示:

在这里插入图片描述

在这里插入图片描述

八、毕昇 jdk 的未来发展

8.1、即将面世的功能

8.2、未来方向

九、如何获得毕昇 jdk 及帮助?

下载 jdk 8 和 jdk 11https://kunpeng.huawei.com/#/developer/devkit/complier?data=jdk
在这里插入图片描述

9.1、jdk 8 的代码仓

https://gitee.com/openeuler/bishengjdk-8

在这里插入图片描述

9.2、jdk 11 的代码仓

https://gitee.com/openeuler/bishengjdk-11

在这里插入图片描述


总结

本文我们给大家介绍了何为毕昇 jdk,整体的发展史如何,是在什么样的形势下华为要做毕昇 jdk,在底层的优化方面又做到了哪些?同时又潜藏了哪些值得开发的价值?正为华为编译器资深技术专家彭成寒老师所讲,把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界,这是我们的追求!

在这里插入图片描述


(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

Kunpeng BoostKit 使能套件:大数据场景如何实现“大鹏一日同风起”倍级性能提升?

08-04

openEuler 24.03 LTS 特性解读 | 动态复合页

08-04

素质教育新模式:后疫情时代教育 OMO 模式如何切实落地?

08-04

OERV-RTOS: UniProton 适配 Milk-V Duo,加速 openEuler RISC-V 生态

08-04

MICA:面向复杂嵌入式系统的混合关键性部署框架

08-04

openEuler 成立 SIG-Intelligence:打造智能体应用与工具链的创新引擎,引领AI技术前沿探索

08-04

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论