oracle vm virtualbox启动不了_【Java on RISC-V】Maxine-VM对于RISC-V的支持进展调研与搭建测试...

本文是根据Maxine-VM官方文档 对于RISC-V的支持进展进行的调研与在Fedora(on QEMU)虚拟机上的搭建测试

简介

Maxine VM是一个几乎全部以Java代码实现(只有用于启动Java虚拟机的加载器使用C语言编写)的元循环Java虚拟机。

这个项目于2005年开始,到现在仍然在发展之中,它有先进的即时编译器和垃圾收集器,可在宿主模式或独立模式下执行,其执行效率已经接近HotSpot虚拟机Client模式的水平。后来有了从C1X编译器演进而来的Graal编译器的支持,就更加如虎添翼,执行效率有了进一步飞跃。

Graal编译器现在已经是HotSpot的默认组件,是未来代替HotSpot中服务端编译器的希望。

状态

Maxine VM团队正在RISC-V上开发和测试Maxine VM的环境,目前依靠QEMU处理器仿真器在其上运行Maxine VM。

架构 操作系统 Boot Java版本 MaxineVM版本
RISC-V64 Fedora 31 (on QEMU) OpenJDK8 (u222) 2.9.0

解释器和编译器

  • Maxine不含解释器(interpreter),它声称使用非常快速的基准编译器。请参阅T1X编译器。
  • Maxine提供了两个优化的编译器,C1X和Graal。前者是Hostpot客户端编译器(C1)的演进,官方文档中宣称非常稳定,但不再开发。Graal更类似于Hotspot服务器编译器(C2),并且正在积极开发和改进。默认映像构建仍将C1X用作优化编译器,但是可以选择Graal,用于运行时编译和VM引导映像(后者目前是不稳定的)。要将Graal作为运行时优化编译器来构建启动映像:
mx image @c1xgraal
  • 在这种情况下,优化编译器实际上是C1X和Graal的混合体,如果Graal编译失败,则将C1X用作备用选项。请注意,包括Graal在内,VM启动映像要大得多(大约100MB)。
    要使用Graal编译引导映像本身:
mx image @c1xgraal-boot

mx是一种用于管理Java代码开发的命令行工具。

尝试在Fedora(on QEMU)上运行Maxine-VM

假定Ubuntu版本至少为16.04,并且已搭建好交叉编译环境和Fedora (on QEMU)。

Maxine-VM通用的生成和使用说明

Maxine 的构建过程依赖于MX工具。要获取它并将其添加到您的PATH执行中:

export WORKDIR=/home/linux/opt/maxine-src  # Modify this line
sudo apt-get install python                # MX depends on python
mkdir -p $WORKDIR
cd $WORKDIR
git clone https://github.com/graalvm/mx
export PATH=$PATH:$(pwd)/mx

Maxine还依赖于openJDK8,要从ubuntu存储库中获取它,请运行:

sudo apt-get install openjdk-8-jdk

为了构建maxine,我们首先需要定义许多环境变量:

  1. 定义要使用的目录:
    export WORKDIR=$WORKDIR # Modified last step
  2. 定义要使用的JDK:
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
  3. 获取Maxine VM源代码:
    git clone --recursive https://github.com/beehive-lab/Maxine-VM.git maxine
  4. 定义MAXINE_HOME
    export MAXINE_HOME=$WORKDIR/maxine

构建与RISC-V兼容的Maxine VM镜像

需要完成上述的Maxine-VM通用的生成和使用说明,并且根据实际的环境配置修改CC参数

mx clean
CC=riscv64-unknown-linux-gnu-gcc TARGETISA=riscv64 mx build
mx image -platform linux-riscv64

这样就会在$WORKDIR/maxine/com.oracle.max.vm.native下生成所需要的VM镜像

在Fedora RISC-V VM上运行Maxine VM

现在需要将生成的图像复制到QEMU中运行的Fedora RISC-V VM:

scp -P 3333 -r /home/linux/opt/maxine-src/maxine/com.oracle.max.vm.native root@localhost:~/

之后步骤都是在Fedora虚拟机中进行,在进入下面的步骤之前,需要安装java-1.8.0-openjdk:

dnf install java-1.8.0-openjdk-devel.riscv64
java-1.8.0-openjdk.riscv64 : OpenJDK Runtime Environment 8 (only include jre)
java-1.8.0-openjdk-devel.riscv64 : OpenJDK Development Environment 8
后者名称中包含jdk实际安装后发现只含有jre,因此需要安装前者

之后可以在Fedora虚拟机运行Maxine VM:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export LD_LIBRARY_PATH=/home/riscv/maxine-src/maxine/com.oracle.max.vm.native/generated/linux

/home/riscv/maxine-src/maxine/com.oracle.max.vm.native/generated/linux/maxvm本质上可以相当于命令java

HelloWorld测试

HelloWorld.java:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("HelloWorld!");
    }
}

f05e8a2d541d59155d82339c088d3377.png

在RISC-V上尝试用Maxine VM的HelloWorld部分暂时告一段落

(补充)使用docker搭建Maxine VM开发环境

官方构建文档对于构建过程已经描述的足够详细,这里补充一下实际构建过程中遇到的几个问题

  • 执行sudo docker-compose up --no-start提示
    ERROR: Volume maxine-dev-mx-sync declared as external, but could not be found. Please create the volume manually using `docker volume create --name=maxine-dev-mx-sync` and try again.
    解决方法:根据提示执行sudo docker volume create --name=maxine-dev-mx-sync
  • 执行sudo docker-compose up --no-start提示ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running? 主要原因是docker不是系统服务方式启动。 解决方法: 1、启动docker服务 service docker start 2、生成自启动服务 systemctl enable docker.service 3、查看服务状态,Active状态为:active(running) systemctl status docker.service

你可能感兴趣的:(oracle,vm,virtualbox启动不了)