为编程爱好者分享易语言教程源码的资源网

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

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

三叶资源网 2023-01-15 20:18:50 其它综合 1523 ℃ 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
多页面浏览器MongoDB分段加密奇易模块鼠标录制拖放支持库树形框项目切换哈希表类高仿WPF界面Exui工作记忆训练脚本代理ip采集excel表归属地查询10086登录文件枚举翻译工具QQ手游授权登录进程监控
最新评论