---
title: 毕昇JDK团队主导的RISC-V port正式合入OpenJDK主线-官方技术文章-鲲鹏社区
description: 本文对OpenJDK RISC-V port、如何体验 RISC-V JDK进行介绍。
keywords: RISC,毕昇,团队主导的,OpenJDK,正式合入,主线,官方技术文章,鲲鹏社区
url: https://www.hikunpeng.com/developer/techArticles/20230816-3?envFlag=1
section: (其他)
---

# 毕昇JDK团队主导的RISC-V port正式合入OpenJDK主线-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20230816-3?envFlag=1
描述: 本文对OpenJDK RISC-V port、如何体验 RISC-V JDK进行介绍。
关键词: RISC,毕昇,团队主导的,OpenJDK,正式合入,主线,官方技术文章,鲲鹏社区

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

毕昇JDK团队主导的RISC-V port正式合入OpenJDK主线

毕昇JDK团队主导的RISC-V port正式合入OpenJDK主线

javajdk

发表于 2022/05/14

0

## OpenJDK RISC-V port 介绍

RISC-V [3] 是一个开源免费的 RISC 指令集架构。随着指令集架构设计逐渐成熟，越来越多的开发者参与到了 RISC-V 生态建设中，将 Java 带到 RISC-V 世界的呼声也越来越高。毕昇 JDK 团队 RISC-V port 工作时间线如下：

1. 2019 年，开始基于 OpenJDK 11 的 Linux/RISC-V 的移植工作

2. 2020 年，在 OpenEuler 社区上开源: openEuler/bishengjdk-11 [4]

3. 2021 年，与社区合作，基于 OpenJDK RISC-V port [5]，开展 upstream 流程

4. 2022 年，合入 OpenJDK 主线 (JDK19)

### 1. RISC-V port 特性介绍

RISC-V port 涉及的模块如下图所示：

OpenJDK RISC-V port 提供如下特性：

（1）Template Interpreter 模板解释器

（2）C1 (client) JIT 编译器

（3）C2 (server) JIT 编译器

（4）当前主线支持的所有 GC (包括 ZGC 和 ShenandoahGC)

RISC-V port 基于 RV64G (IMAFD) 基础指令集提供了 64 位 RISC-V 架构支持，此外还为 Vector、Compressed (由阿里开发者贡献)、Bit-Manipulation 扩展提供了实验性支持。实验性扩展需要通过 -XX:+UseRVV、-XX:+UseRVC、-XX:+UseZba 和 -XX:+UseZbb 选项来显式启用。

除此之外，基于正式发布的 ISA 扩展集合，RISC-V port 提供了 String、Array 和 BigInteger 等 Java 类的 intrinsic 支持。目前 RISC-V Cryptography Extension 尚未正式发布，因此涉及到其中加解密指令的 sha/crc 相关 intrinsic 还在计划中。

当前 RISC-V port 还提供了 32 位的 Zero 支持，RV32G 后端 port 由中科院软件所 PLCT 实验室团队主导开发，仓库地址：openjdk-riscv/jdk11u [6]。

更多 RISC-V port 的内容，可以回顾毕昇 JDK 团队在 RISC-V 中国峰会上的报告：Porting OpenJDK to RISC-V [7]。也可以在 riscv-port-dev [8] 上发起讨论。

### 2. RISC-V port 测试情况

RISC-V port 测试主要在 QEMU 和 Native 环境中展开 (感谢中科院软件所 PLCT 实验室提供的 RISC-V 硬件和测试支持)。测试内容主要有功能测试 (jtreg tier {1,2,3,4}，jcstress) 和相关 Java benchmark (SPECjvm2008、dacapo 等) 测试。

RISC-V port 实现了 C1/C2 JIT 编译器，相比 Zero 版本有较大的性能提升。下图对比了 RISC-V Server 和 RISC-V Zero 在 SPECjvm2008 上的性能差异，结果显示 RISC-V Server 性能可以达到 Zero 的 39 倍。

RISC-V port 在 SPECjbb2015 上的性能数据如下图所示：

## 体验 RISC-V JDK

目前 RISC-V JDK (JDK19) 可以直接通过 builds.shipilev.net [9] 下载体验。如果没有硬件环境，可以通过交叉编译来构建 JDK。为了方便工具链的配置，文章中的构建步骤均基于 Docker，因此需要预先安装 Docker 环境。下面介绍如何从源码交叉编译 RISC-V JDK。

### 1. 构建环境配置

（1）x86_64 环境 (其他架构环境未经测试)

（2）docker

（3）adoptopenjdk/centos6_build_image [10]

拉取最新的构建镜像：

```bash
$ docker pull adoptopenjdk/centos6_build_image:latest
```

启动镜像：

```bash
$ docker run -it --rm adoptopenjdk/centos6_build_image
```

### 2. 源码构建 RISC-V JDK

拉取代码：

```bash
$ git clone https://github.com/openjdk/jdk.git
```

交叉编译：

```bash
# add riscv toolchain to PATH and LD_LIBRARY_PATH
$ export RISCV64=/opt/riscv_toolchain_linux
$ export LD_LIBRARY_PATH=$RISCV64/lib64:/usr/local/gcc/lib64:/usr/local/gcc/lib
$ export PATH="$RISCV64/bin:$PATH"
$ export CC=$RISCV64/bin/riscv64-unknown-linux-gnu-gcc
$ export CXX=$RISCV64/bin/riscv64-unknown-linux-gnu-g++

# configure and build
$ bash configure                            \
    --openjdk-target=riscv64-unknown-linux-gnu  \
    --with-sysroot=/opt/fedora28_riscv_root     \
    --with-boot-jdk=/usr/lib/jvm/jdk-18         \
    BUILD_CC=/usr/local/gcc/bin/gcc-7.5         \
    BUILD_CXX=/usr/local/gcc/bin/g++-7.5
$ make images
```

目前镜像中可能还未包含 jdk18，可以前往 Adoptium [11] 下载 jdk18 作为 bootjdk。

### 3. 源码编译 QEMU RISC-V

如果没有硬件环境，可以通过 QEMU 模拟的方式来运行 JDK，下面简单介绍一下从源码编译 QEMU RISC-V:

获取 QEMU 源码：

```bash
$ git clone https://github.com/qemu/qemu.git
```

构建 QEMU RISC-V：

```bash
$ cd qemu && mkdir build && cd build
$ ../configure --prefix=/path/to/install/qemu \
    --target-list=riscv64-linux-user,riscv64-softmmu
$ make -j && make install
```

源码编译过程中需要一些额外的依赖如 ninja 等，按需安装即可。编译完成后，可以在 /path/to/install/qemu 中找到对应的二进制。

### 4. 测试 java -version

QEMU user 模式下：

```bash
$ qemu-riscv64 -L /path/to/sysroot /path/to/openjdk-riscv/bin/java -version
```

QEMU system 下，直接执行如下命令即可:

```bash
$ /path/to/openjdk-riscv/bin/java -version
```

## 结语

经过 OpenJDK 开源社区和毕昇 JDK 团队的共同努力，OpenJDK RISC-V 终于成为 OpenJDK 的家族成员之一。这是第一个由华为团队主导的 OpenJDK 社区项目，也体现了毕昇 JDK 团队持续拥抱开源，回馈开源的信念。欢迎大家参与到 RISC-V OpenJDK 的开发中来，为 RISC-V 生态建设添砖加瓦。

## 参考链接

[1]https://wiki.openjdk.java.net/display/RISCVPort [了解详情](https://wiki.openjdk.java.net/display/RISCVPort)

[2]https://github.com/openjdk/jdk/pull/6294 [了解详情](https://github.com/openjdk/jdk/pull/6294)

[3]https://riscv.org/about [了解详情](https://riscv.org/about)

[4]https://gitcode.com/openeuler/bishengjdk-11/tree/risc-v [了解详情](https://gitee.com/openeuler/bishengjdk-11/tree/risc-v)

[5]https://github.com/openjdk/riscv-port [了解详情](https://github.com/openjdk/riscv-port)

[6]https://github.com/openjdk-riscv/jdk11u [了解详情](https://github.com/openjdk-riscv/jdk11u)

[7]https://www.bilibili.com/video/BV1n64y1t7gc [了解详情](https://www.bilibili.com/video/BV1n64y1t7gc)

[8]https://mail.openjdk.java.net/mailman/listinfo/riscv-port-dev [了解详情](https://mail.openjdk.java.net/mailman/listinfo/riscv-port-dev)

[9]https://builds.shipilev.net/ [了解详情](https://builds.shipilev.net)

[10]

[11]https://adoptium.net [了解详情](https://adoptium.net/index.html)

编者按：2022 年 3 月 14 日，华为毕昇 JDK 团队主导开发的 OpenJDK RISC-V port [1] 正式合入 OpenJDK 主线 [2]，成为 OpenJDK 的官方 port 之一。OpenJDK 19 将会是第一个支持 RISC-V 后端的版本。

本页内容
