SpringBoot3.0支持了将java程序构建为可执行文件

其实将java构建为native应用,不是第一次提及了,我第一次听到这个想法的时候是Quarkus(exe4j不算哈,本质上还是启动了jvm进程),也大致看了一下官方文档,极少的内存占用和极快的启动速度。当时觉得好厉害。如果Spring和Quarkus让我选的话我肯定选spring,毕竟公司买服务器又不是花我钱。再说了买服务器是花了钱的闲着也是闲着起个jvm占点内存挺好。Spring相对来说我更熟悉,所以Spring应该是大多数人的选择。

一直以来java都存在 执行效率低,内存占用多,启动速度慢的问题。其实这些问题都也都是其又优势导致。一次编译到处运行,编译结果不依赖操作系统,由不同的jre来屏蔽操作系统的差异 。SpringBoot3.0 Native构建可以以极低的学习成本去解决这些问题。但相对应的代价就是编译结果是针对行的,我们在windows上构建的应用没办法在linux上运行(官网上暂时没有看到交叉编译相关的内容,都2202年了交叉编译是标配,应该是我没有找到)一次编译就只针对一个平台,无法做到一次编译到处运行。

项目前环境准备

graalvm  Visual Studio

graalvm 我是用的版本是17 ,VS我使用的版本是2022

把JAVA_HOME指向我们刚解压的graalvm

创建测试项目

使用idea创建SpringBoot 项目,演示情况我依赖就只选web

写一个测试接口

访问正常,在idea下启动速度是1.625秒。

对比两种打包方式的启动速度和内存占用

直接成jar包运行,启动时间是1.542秒

内存占用是109M

native方式打包直接在idea里插件执行或者是dos里运行maven命令都会报错

Execution of D:\develop\graalvm-ce-java17\bin\native-image.cmd @target\tmp\native-image-2002058499160718203.args returned non-zero result

这个问题一度困了我好长时间,而且这个错我还没有搜到正确的解决方案。直到我在仔细的去看官方文档

因为我Visual Studio在我刚买回电脑的时候就已经装好了,所以Visual Studio安装步骤我就没有做,其实Visual Studio在官网指引中是需要安装到,但是到现在为止我们还是没有用到。在电脑搜索里输入 Native Tools Command Prompt

可以看到来自vs 2022 ,打开这个,转到项目所在目录,输入官网给出的命令

mvn -Pnative native:compile

然后就是的等待构建成功,target目录下又exe文件

启动时间0.079秒,毫秒级启动!!! 

内存占用33M

 内存占用: 109M -> 33M

启动时间:1.542s -> 0.079s

执行效率,理论上来讲少了jvm的翻译效率应该回高一些。但是性能测试情况毕竟复杂,没有测试所有不做结果评判。(jvm在代码执行上做了大量的优化,如JIT)

SpringBoot3.0 Native构建相关推荐

  1. Graalvm安装配置与springboot3.0尝鲜

    Graalvm安装配置与springboot3.0尝鲜 Spring 团队一直致力于 Spring 应用程序的原生映像支持已有一段时间了.经过3 +年的孵化春季原生Spring Boot 2 的实验性 ...

  2. 如何使用React Native构建嵌套的抽屉菜单

    by Dhruvdutt Jadhav 由Dhruvdutt Jadhav 如何使用React Native构建嵌套的抽屉菜单 (How to build a nested drawer menu w ...

  3. 我们如何使用CircleCI 2.0来构建Angular应用并将其部署到AWS S3

    by Marius Lazar 通过马里乌斯·拉扎尔(Marius Lazar) 我们如何使用CircleCI 2.0来构建Angular应用并将其部署到AWS S3 (How we used Cir ...

  4. [面试专题]Vue.js 2.0 独立构建和运行时构建的区别

    Vue.js 2.0 独立构建和运行时构建的区别 标签(空格分隔): 未分类 在使用 Vue.js 2.0 时,有独立构建(standalone)和运行时构建(runtime-only)两种版本可供选 ...

  5. Springboot3.0整合swagger,废弃Springfox改用Springdoc

    什么是Springfox Automated JSON API documentation for API's built with Spring 官网地址:springfox.io 什么是Sprin ...

  6. 如何使用React Native构建新闻应用

    by Mohammed Salman 穆罕默德·萨尔曼(Mohammed Salman) 如何使用React Native构建新闻应用 (How to build a news app with Re ...

  7. SpringBoot3.0整合chatGPT

    导读 导读 | 12月总体来说互联网的技术圈是非常热闹的,chatGPT爆火,SpringBoot3.0发布等重磅陆消息续进入大家的视线,而本文作者将以技术整合的角度,带大家把最火的两个技术整合在一起 ...

  8. 开发APP新选择:使用 Vue Native 构建移动应用

    Vue Native 是一个 JavaScript 框架,旨在使用 JavaScript 构建可以在 Android 和 iOS 上运行的跨平台移动应用程序.通过封装 React Native,开发人 ...

  9. 基于qemu-riscv从0开始构建嵌入式linux系统ch10. qemu之virtio与fw_cfg

    基于qemu-riscv从0开始构建嵌入式linux系统ch10. qemu之virtio与fw_cfg 上一节我们已经基本完成了uboot的移植,下一步自然就是移植linux kernel.在真实的 ...

最新文章

  1. Mysql 索引原理及优化
  2. javascript 正则表达式详解
  3. elasticsearch实战三部曲之三:搜索操作
  4. python获取已打开网页的html,【已解决】Python的BeautifulSoup去实现提取带tag的HTML网页主体内容...
  5. 【直播预告】天黑请闭眼,杭州终极狼人大奖赛正在查杀——见证 4 万现金大奖的诞生!...
  6. PAT_B_1082_C++(20分)
  7. PostgreSQL安装和简单配置
  8. UITableView的优化原理
  9. 1057 数零壹 (20 分)
  10. 解决:-source 1.6 中不支持 diamond 运算符 [ERROR] (请使用 -source 7 或更高版本以启用 diamond 运算符)
  11. 写在32岁年龄的开始
  12. 设计界新人不用再苦找资源网站啦!一流导航神器收藏起来!
  13. 用学生邮箱申请Jetbrains教育版账号教程(广中医为例)
  14. Datawhale组队学习周报(第044周)
  15. 如何测量二极管的正负极
  16. 计算机表格怎样筛选男女,excel表格数据男女筛选-EXCEL表格中选择性别怎么做 就是如何做筛选 ,比如......
  17. 制作 img系统镜像的详细方法
  18. screen工具使用
  19. Mysql InnoDB 的锁机制
  20. 搭建游戏联运系统需要什么条件?

热门文章

  1. 英语突破与个人成功的超级秘诀
  2. python怎么换背景_3行Python代码实现图像照片抠图和换底色的方法
  3. SolarWinds发布2022 IT趋势报告:混合IT增加网络复杂性,技术人表示缺乏信心
  4. 企业公众号运营堪忧 微信涨粉已过黄金时代
  5. es文件浏览器怎么开ftp服务器,es文件浏览器怎么建立ftp服务器
  6. js如何实现扫描身份证识别_【已解决】离线打包,原生层读取身份证信息,如何传递身份证中的照片数据到JS层...
  7. c语言消隐算法实现,计算机图形学试卷.doc
  8. 关于档案没有寄回生源地的解决方案
  9. 【树莓派】树莓派小车(一)小车配件选购及安装(多图)
  10. 237. 删除链表中的节点【我亦无他唯手熟尔】