为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

网站首页 > 网络编程 > 其它综合 正文

关于使用GraalVM打包java项目,生成各种原生应用的对比

三叶资源网 2023-01-15 20:18:50 其它综合 768 ℃ 0 评论

GraalVM是一种新型的Java虚拟机,旨在提高Java应用程序的性能和可靠性。GraalVM的一个重要功能是可以将Java应用程序打包成本地可执行文件,而不是使用传统的Java虚拟机来运行应用程序。本文将比较使用GraalVM打包Java项目生成各种原生应用的差异。

赶时间的可以直接跳过中间的步骤,看最后面的对比结果表格。

本文对应的源码,放在这里:GitHub - guwan/java-native-compare: Comparison of using GraalVM to package Java projects and generate various native applications.

需要注意一点的是,本文的启动时间均是首次程序的启动时间。所有的例子后续启动时间都会下降,但都是启动时间都是变化的,所以我认为不如首次启动这个标准有效。

  1. 最简单的 hello world

最简单的Hello World应用程序只是输出一行文本。

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

使用GraalVM将这个应用程序打包成本地可执行文件只需要两个简单的步骤。

javac HelloWorld.java
native-image HelloWorld

使用GraalVM打包Hello World应用程序的时间约为29.1秒,

生成的可执行文件大小约为12MB。

启动相对于传统jar包就快来很多,只需124毫秒。

使用GraalVM打包时,GraalVM会将应用程序的所有依赖项都打包进可执行文件中,包括JVM和Java库。这使得生成的可执行文件相对较大。因为已经编译成二进制了,所以启动较快。


  1. Spring Boot版的 hello world

Spring Boot是一个非常流行的Java框架,它可以帮助开发人员快速构建Java应用程序。使用Spring Boot构建的Hello World应用程序与传统的Hello World应用程序相比更为复杂。因此,使用GraalVM将Spring Boot应用程序打包成本地可执行文件需要更多的时间。

使用GraalVM打包Spring Boot版Hello World应用程序的时间约为1分 14秒。

生成的可执行文件大小约为35MB。

首次启动时间为54毫秒,比较意外的是比最简单的Hello World启动时间更短。

Spring Boot应用程序更为复杂,包含了大量的依赖项和库,需要更长时间来打包。此外,由于Spring Boot应用程序包含了许多依赖项,因此生成的可执行文件也更大。启动时间更短我想是因为spring 做了大量优化吧。


  1. Spring Boot Web

Spring Boot Web版Hello World应用程序是一种更为复杂的应用程序,它可以通过Web浏览器访问。使用GraalVM将Spring Boot Web应用程序打包成本地可执行文件需要更多的时间和资源。

使用GraalVM打包Spring Boot Web版Hello World应用程序的时间约为107秒,

生成的可执行文件大小约为68MB。

首次启动时间为176毫秒。

因为Spring Boot Web应用程序包含了更多的依赖项和库,需要更多的时间来打包。此外,由于Web应用程序需要支持HTTP协议,因此生成的可执行文件也更大。


  1. Spring Boot Web & Spring Boot JPA

Spring Boot Web & Spring Boot JPA版应用程序是一种更为复杂的应用程序,它包含了Web和数据库访问功能。实际进行企业应用开发时,我们的应用更接近于这个版本的程序,因为都会和这个版本一样,具有访问数据库和对外开发接口的能力。我在将这个版本的程序打包成原生应用时,也遇到些挫折,从spring starter下载JPA的例子无法直接打包成原生应用,将它使用的hibernate插件降级成6.1.7.final才运行成功。证明Spring boot native项目的流行度还不够,bug的及时处理速度和spring boot等流行模块不能比。

id 'org.hibernate.orm' version '6.1.7.Final'

使用GraalVM打包Spring Boot Web & Spring Boot JPA版Hello World应用程序的时间约为231秒,

生成的可执行文件大小约为133MB,并且会生成9个运行时必须的dll文件。

首次启动耗时:246毫秒。

这是因为Spring Boot Web & JPA应用程序包含了更多的依赖项和库,需要更多的时间来打包。此外,由于该应用程序需要访问数据库,因此生成的可执行文件大小也更大。

综合来看,使用GraalVM将Java应用程序打包成本地可执行文件可以提高应用程序的性能和可靠性,但也会增加生成可执行文件的时间和大小。对于简单的Hello World应用程序,生成时间和可执行文件大小仍然较小。但是,对于更为复杂的应用程序,如Spring Boot Web & JPA应用程序,生成时间和可执行文件大小会显著增加。因此,在使用GraalVM打包Java应用程序时,需要权衡应用程序的大小和性能,并选择最适合的打包方式。



打包时间(秒)

启动时间(毫秒)

原生应用大小MB

传统jar包大小MB

Hello World

29

124

12

无jar包,大小1k

Spring Boot

74

54

37

9

Spring Web

107

176

68

19

Spring Web&JPA

231

246

133

43


总结:从上面的表格我们可以看到:应用打包的时间和包大小大幅度提升了,启动时间缩短了大幅度降低


我评估exe执行时间的命令行

Measure-Command {start-process  D:\git\java-native-compare\plain\helloworld.exe -Wait}

电脑配置等可能影响生成应用的时间和大小,下面我贴出我的电脑配置,仅供参考:

处理器:Intel(R) Core(TM) i5-10500 CPU @ 3.10GHz 3.10 GHz

内存:16.0 GB (15.8 GB 可用)

操作系统: windows10

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
字库验证码识别数美ORACLE数据库smartQQ多线程注册组件移动例程MP4视频文件仿微信登录UI界面邮件大站协议装修预算计算器HOOK任意地址手游登录黑月插件快速启动BitBlt汇编版图文微博IP地址定位获取网络IP地址DNS二维数组折线图源码
最新评论