How to run a Java program as native image in Graalvm

本文介绍了如何利用GraalVM的原生镜像功能,从编写简单的HelloWorld Java程序开始,经过编译、生成原生镜像,到最后直接运行可执行文件的过程。通过这个例子,读者可以了解GraalVM在提高Java应用运行效率方面的应用。
摘要由CSDN通过智能技术生成

今天,来一起看一下,如何基于graalvm中的原生镜像来跑一个名为HelloWorld的Java程序。

首先,我们准备一个名称为HelloWorld.java的文件,如下所示。

lwk@qwfys:~/Public/project/gitee/graalvm$ ll
total 12
drwxrwxr-x 2 lwk lwk 4096 Sep 28 12:11 ./
drwxrwxr-x 5 lwk lwk 4096 Sep 25 02:05 ../
-rw-rw-r-- 1 lwk lwk  116 Sep 28 12:08 HelloWorld.java
lwk@qwfys:~/Public/project/gitee/graalvm$

文件的内容为:

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

这是一个比较简单的HelloWorld Java程序。

编译之前,我们先给大家确认一下java版本,命令如下:

lwk@qwfys:~/Public/project/gitee/graalvm$ java --version
openjdk 11.0.12 2021-07-20
OpenJDK Runtime Environment GraalVM CE 21.2.0 (build 11.0.12+6-jvmci-21.2-b08)
OpenJDK 64-Bit Server VM GraalVM CE 21.2.0 (build 11.0.12+6-jvmci-21.2-b08, mixed mode, sharing)
lwk@qwfys:~/Public/project/gitee/graalvm$

话不多说,我们接下来编译一下文件HelloWorld.java命令如下:

lwk@qwfys:~/Public/project/gitee/graalvm$ javac HelloWorld.java 
lwk@qwfys:~/Public/project/gitee/graalvm$ ll
total 16
drwxrwxr-x 2 lwk lwk 4096 Sep 28 12:11 ./
drwxrwxr-x 5 lwk lwk 4096 Sep 25 02:05 ../
-rw-rw-r-- 1 lwk lwk  427 Sep 28 12:11 HelloWorld.class
-rw-rw-r-- 1 lwk lwk  116 Sep 28 12:08 HelloWorld.java
lwk@qwfys:~/Public/project/gitee/graalvm$

我们先简单运行下,命名如下:

lwk@qwfys:~/Public/project/gitee/graalvm$ java HelloWorld 
Hello, World!
lwk@qwfys:~/Public/project/gitee/graalvm$

接下来,我们基于刚才生成的HelloWorld.class文件生成相应的原生镜像,也就是平台相关的CPU相关的二进制文件,命名如下:

lwk@qwfys:~/Public/project/gitee/graalvm$ native-image HelloWorld
[helloworld:95671]    classlist:   1,162.25 ms,  0.96 GB
[helloworld:95671]        (cap):     456.12 ms,  0.96 GB
[helloworld:95671]        setup:   1,852.26 ms,  0.96 GB
[helloworld:95671]     (clinit):     160.11 ms,  1.74 GB
[helloworld:95671]   (typeflow):   3,917.39 ms,  1.74 GB
[helloworld:95671]    (objects):   3,060.04 ms,  1.74 GB
[helloworld:95671]   (features):     325.85 ms,  1.74 GB
[helloworld:95671]     analysis:   7,696.68 ms,  1.74 GB
[helloworld:95671]     universe:     672.44 ms,  1.74 GB
[helloworld:95671]      (parse):     677.94 ms,  1.77 GB
[helloworld:95671]     (inline):   1,025.42 ms,  2.36 GB
[helloworld:95671]    (compile):   7,739.75 ms,  2.40 GB
[helloworld:95671]      compile:   9,915.98 ms,  2.40 GB
[helloworld:95671]        image:   1,357.51 ms,  2.40 GB
[helloworld:95671]        write:     182.67 ms,  2.40 GB
[helloworld:95671]      [total]:  23,053.74 ms,  2.40 GB
# Printing build artifacts to: /home/lwk/Public/project/gitee/graalvm/helloworld.build_artifacts.txt
lwk@qwfys:~/Public/project/gitee/graalvm$ ll
total 11168
drwxrwxr-x 2 lwk lwk     4096 Sep 28 12:12 ./
drwxrwxr-x 5 lwk lwk     4096 Sep 25 02:05 ../
-rwxrwxr-x 1 lwk lwk 11412048 Sep 28 12:12 helloworld*
-rw-rw-r-- 1 lwk lwk       25 Sep 28 12:12 helloworld.build_artifacts.txt
-rw-rw-r-- 1 lwk lwk      427 Sep 28 12:11 HelloWorld.class
-rw-rw-r-- 1 lwk lwk      116 Sep 28 12:08 HelloWorld.java
lwk@qwfys:~/Public/project/gitee/graalvm$

我们看到已经生成了一个名称为helloworld的可执行文件,接下来,我们可以直接运行它,命令如下:

lwk@qwfys:~/Public/project/gitee/graalvm$ ./helloworld 
Hello, World!
lwk@qwfys:~/Public/project/gitee/graalvm$

最后,我们再看一下,刚才生成的文件中,还有一个名称为helloworld.build_artifacts.txt的文件,我们看里面都一些什么,命令如下:

lwk@qwfys:~/Public/project/gitee/graalvm$ cat helloworld.build_artifacts.txt 
[EXECUTABLE]
helloworld

lwk@qwfys:~/Public/project/gitee/graalvm$

至此,我们就完成了一个简单的实验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qwfys200

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值