SpringBoot2.4.0 已经支持 GraalVM 了

2020-12-23 10:35:51 +08:00
 monkeyWie

可以支持 AOT,启动速度和内存占用情况都有大幅度的提升,但是缺点是因为要做 AOT,所有的反射和动态代理都需要特殊处理,通过配置文件来声明。

官方文档
GitHub

4454 次点击
所在节点    Java
8 条回复
Oktfolio
2020-12-23 10:45:04 +08:00
不还是 experimental 吗?很久之前就玩过了。
kingfalse
2020-12-23 11:18:41 +08:00
一直在开发,还没 ga,
lancelock
2020-12-23 11:52:03 +08:00
我试过怎么感觉内存占用高了很多,不过 native 过后表现确实挺好的。

但是 native 我只能在自己本机上打包,在云上用 docker 容器编译就爆内存了好像,部署不了 ci/cd
monkeyWie
2020-12-23 12:50:58 +08:00
@lancelock #3 编译现在确实是个大问题,又慢又吃配置,不过还好开发的时候不用 AOT
mamahaha
2020-12-23 12:55:31 +08:00
graalvm 是啥?
hantsy
2020-12-23 18:23:14 +08:00
experimental 下的那个项目,已经快两年了。Spring Boot 现在使用太麻烦,限制太多,离生产环境使用差太远了。

如果不改变 Spring IOC 本身,类反射和动态代替是最基本的障碍,而这些是 Spring IOC 的基础。目前 Spring 太难了,想作到与 Quarkus 一样几乎不可能。

目前只有 Quarkus 从一开始就是支持 GraalVM 的,Quarkus 是完全抛弃现有的 Weld,重新写一个 Arc 容器(支持 CDI 子集),以适应 [ [ [编译时处理] ] ] 代替之前的 Runtime Proxy 。
Micronaount 在 2.0 以后也添加了支持。
Helidon 2.0 中 SE 版本已经支持(刚刚发布的 Helidon 2.2 还支持了 Java 16 中的 Virtual Threads )。

但是 Native 编译是费力的事,去前写的 Quarkus 的测试:

https://github.com/hantsy/quarkus-sample/blob/master/docs/01-start.md

内码启动时间(看程序大小,大约快是 10 到 100 倍,这个最明显的),至少提高一个数量级以上,一般请求性能也有一定优化,内存消耗整体降低了不少。
abcbuzhiming
2020-12-29 23:29:02 +08:00
这东西最吸引我的就是编译成 native 后启动速度大增,内存占用降了 10 倍不止
hantsy
2021-01-02 20:10:51 +08:00
@abcbuzhiming 启动速度是快了 10 倍以上。但运行时,随着项目的体积增大,只是有少量提升(内存和响应速度)。

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

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

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

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

© 2021 V2EX