21.1.0 发布


龙芯荣幸宣布基于 OpenJDK 21 的龙芯平台 Java 环境发布。

Java 21 是最新的 LTS(Long-Term Support, 即长期支持)版本,甲骨文等厂商预计对 Java 21 提供长达八年的支持 [1]。Java 21 包含 15 个新的 JEP(JDK Enhancement Proposal,即JDK增强建议):

  • 430: String Templates (Preview)
  • 431: Sequenced Collections
  • 439: Generational ZGC
  • 440: Record Patterns
  • 441: Pattern Matching for switch
  • 442: Foreign Function & Memory API (Third Preview)
  • 443: Unnamed Patterns and Variables (Preview)
  • 444: Virtual Threads
  • 445: Unnamed Classes and Instance Main Methods (Preview)
  • 446: Scoped Values (Preview)
  • 448: Vector API (Sixth Incubator)
  • 449: Deprecate the Windows 32-bit x86 Port for Removal
  • 451: Prepare to Disallow the Dynamic Loading of Agents
  • 452: Key Encapsulation Mechanism API
  • 453: Structured Concurrency (Preview)

此次龙芯发布的 21.1.0 对应上游 GA (General-Availability) 版本 21+35。关于 Java 21 更详细的内容请见https://www.oracle.com/java/technologies/javase/21-relnote-issues.html。自上一个 LTS 版本 Java 17 以来集成的 JEP 的完整列表,请参阅此处

在 21.1.0 中,龙芯团队针对 LoongArch 平台进行了新功能开发和优化,一些主要内容如下。

通过 TCK,符合 Java SE 21

龙芯是具有 TCK 权限的少数几家公司之一 [2]。此次发布的龙芯平台 Java 21 环境经过 TCK 验证符合 Java SE 21,新应用程序和现有应用程序无需修改即可运行。

JEP 439: 分代 ZGC 支持

JEP 通过扩展 ZGC (Z Garbage Collector) 来维护新对象和旧对象的不同代,从而提高应用程序性能。分代 ZGC 通过降低应用程序所需的堆内存和垃圾收集 CPU 的开销以及降低分配停顿的风险,帮助提高开发人员的工作效率。龙芯在 17.1.0 首次实现 LoongArch 平台 ZGC,在此次发布的版本中,实现了 LoongArch 平台上的分代 ZGC。

JEP 444: Virtual Threads 支持

在分时操作系统中,线程是 CPU 时间片分配的最小单位。借助复杂的调度算法,操作系统能够让有限的执行实体并发地处理数量庞大的任务。然而,在 I/O 密集的场景,频繁地挂起和恢复线程会带来不可忽视的上下文切换开销。一种可行的优化方式是在用户态抽象虚拟的线程实体,并将其与操作系统线程建立映射来赋能实际的执行业务。

通过向 Java 平台引入轻量级虚拟线程,在用户态即可实现对时间片资源的精细化管理,避免因频繁地在用户态与内核态之间切换而损耗性能。虚拟线程 API 让开发人员可以轻松编写和维护高吞吐量并发应用,降低对并发应用进行调试、分析以及扩展的难度,进而提升应用开发效率。

JEP 448: Vector API (Sixth Incubator) 支持

Vector API 为开发人员提供能够清晰和简洁地表达各种向量计算的 API。使用该 API 的程序可以在运行时被编译为目标 CPU 架构上的最优的向量指令,从而实现优于等效标量计算的性能。龙芯在 17.1.0 中实现了 Vector API (2nd Incubator) 的支持,此次发布的版本与社区的 Vector API 保持同步,并进一步充分利用 LoongArch 的向量指令。

Vector API 的相关 JEP 为:

  • [JDK 16] JEP 338: Vector API (Incubator)
  • [JDK 17] JEP 414: Vector API (2nd Incubator)
  • [JDK 18] JEP 417: Vector API (3rd Incubator)
  • [JDK 19] JEP 426: Vector API (4th Incubator)
  • [JDK 20] JEP 438: Vector API (5th Incubator)

JEP 442: Foreign Function & Memory API (Third Preview) 支持

Foreign Function & Memory API 使 Java 程序更容易与 Java 运行时之外的代码和数据进行互操作。这个新的 API 支持 Java 程序在无需 JNI (Java Native Interface) 的情况下调用本地库和处理原生数据,从而为开发人员提高了易用性、灵活性、性能和安全性。

此次发布的版本包含了相关 JEP 在 LoongArch 平台上的实现,这些 JEP 还包括:

  • [JDK 19] JEP 424: Foreign Function & Memory API (Preview)
  • [JDK 20] JEP 434: Foreign Function & Memory API (2nd Preview)

自适应使能 UseNUMA

此次发布的版本实现了自适应使能 UseNUMA。当检测到当前系统适合开启 NUMA 优化时,会默认启用 -XX:+UseNUMA 参数,用户不再需要手动配置该参数,从而实现“开箱即用”的性能。

调优 GC 暂停时间,提升 SPECjbb2015 得分

此次发布的版本通过调优 GC 暂停时间,可将 SPECjbb2015 的 critical-jOPS 得分提升 10% 左右。

多项 Intrinsics 优化

此次发布的版本中,龙芯针对 LoongArch 平台的指令特点,完成了一系列 Intrinsics 优化,这些优化包括:

  • DESCrypt Intrinsics优化
  • ChaCha20 Intrinsics优化
  • Thread.currentThread() Intrinsics优化
  • BigInteger.shiftLeft Intrinsics优化
  • BigInteger.shiftRight Intrinsics优化
  • 浮点Math.min/max Intrinsics优化
  • 浮点isInfinite Intrinsics优化
  • isFinite Intrinsics优化
  • unsignedMultiplyHigh Intrinsics优化
  • PopulateIndex Intrinsics优化
  • Math.signum Intrinsics和向量优化

通过这些优化,部分 Benchmark 可以得到明显提升。优化后,SPECjvm2008 中的 crypto.aes 可以提升 35%。优化后,JMH Microbenchmarks 中的部分相关测试用例得到成倍提升。

支持 AM{SWAP/ADD}{_DB}.{B/H} 和 AMCAS{_DB}.{B/H/W/D} 类指令并实现相应优化

AM{SWAP/ADD}{_DB}.{B/H}AMCAS{_DB}.{B/H/W/D} 类指令是 LoongArch V1.1 新增指令,此次发布的版本可以动态识别当前 CPU 平台是否支持该特性并生成最优的指令,通过该优化,可以提升 SPECjbb2015 的 critical-jOPS 得分。

OpenJFX 21支持

在此次发布的版本中,首次对 OpenJFX 21 实现支持,具体版本为 21+31。更多关于 OpenJFX 21 的内容请参阅此处

修复已知问题

该版本对一些已知问题进行了修复,比如解决了 VarHandle getOpaque 偶发出现非法序问题,在 LoongArch 上修复 JDK-6805864 问题,修复提示“UseHeavyMonitors is not fully implemented on this architecture”等问题。


[1] https://www.oracle.com/news/announcement/ocw-oracle-releases-java-21-2023-09-19/
[2] https://openjdk.org/groups/conformance/JckAccess/jck-access.html

©龙芯开源社区 all right reserved,powered by Gitbook文档更新时间: 2024-02-20 10:34:55

results matching ""

    No results matching ""

    results matching ""

      No results matching ""