有人使用 GraalVM 编译 SpringBoot 程序了吗?

2023-04-30 09:54:10 +08:00
 ThinkStu
OP 从去年开始关注 GraalVM 的发展,前天开始想把我之前写的一些小应用转为可执行的二进制文件,原因当然是服务器的内存不够用。

实测在 MacOS 系统上普通 SpringBoot 程序大约占用内存 200MB ,转为可执行文件后内存占用大约 30MB 。

现在最大的问题是,GraalVM + image-native 这一套东西不支持跨端编译!也就是在 Mac 系统上编译出来的程序无法再 Linux 上直接运行。op 曾考虑过将代码转移到 Linux 服务器上进行编译,结果因为许多依赖问题,一直报错,前前后后折腾了两三天也没能想到好方法。🥲
4740 次点击
所在节点    Java
34 条回复
ThinkStu
2023-04-30 19:02:47 +08:00
我刚才使用了 3 种不同情境的虚拟机,编译结果如下(本机 MacOS 系统,M1 pro 芯片):
1 、orbStack 模拟 arm 虚拟机:编译通过,正常生成可执行文件。
2 、orbStack 模拟 Intel 虚拟机:编译失败,未知报错。
3 、阿里云 Intel 服务器:编译通过,正常生成可执行文件。
gakaki
2023-04-30 19:36:17 +08:00
实际上最后还是要用 ci 系统来编译的 也就是 docker 编译 而本地用 arm 自己的即可
awolf
2023-04-30 22:41:21 +08:00
springboot 也能减少内存?奇迹
wdwwtzy
2023-04-30 23:15:27 +08:00
ThinkStu
2023-04-30 23:27:14 +08:00
@awolf 原本编译 jar 包,现在编译成可执行文件,也不需要 JVM 的参与了,内存使用率自然下降(不过编译出来的程序性能也会下降一点)
ThinkStu
2023-04-30 23:28:32 +08:00
@wdwwtzy 哈哈,不过 Java 的开发者可能优先选择切换至 Go
flyqie
2023-05-01 00:58:42 +08:00
@ThinkStu #26

应该不会优先选 go 吧,java 跟 go 在很多方面思路都不一样。。

切到.net 好像更简单一些
cheng6563
2023-05-01 09:09:17 +08:00
用 openj9 jvm 啊
yazinnnn
2023-05-01 10:37:06 +08:00
aot 也需要 jvm
Huelse
2023-05-01 13:33:17 +08:00
至今没成功编译 static image ,有些解决方案藏在他们的 issue 里很难找。
ThinkStu
2023-05-01 22:49:00 +08:00
@Huelse 写了一篇博客《 GraalVM 编译 SpringBoot 程序》,希望对你有所帮助~: https://blog.csdn.net/qq_35760825/article/details/130459747?spm=1001.2014.3001.5501
ThinkStu
2023-05-02 09:13:04 +08:00
@cheng6563 谢了老哥,我也试了下,openj9 平均降低了运行内存 20%~50%~ 对于个人开发者来说,的确是个不错的方案
coderstory
351 天前
openj9 对于某项项目 会导致启动很慢 我已经弃用了
byte10
342 天前
我的那个 alist-encrypt 用的是 nodejs ,先用 ncc 整合编译单个文件,然后用 pgk 进行打包可执行文件。后来又研究了一下 wasm ,挺不错的东西,但是也有很多局限,也不能很好的打包编译。看来还是 go 牛逼点。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/936538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX