清明节在家看了一下 GraalVM,感觉挺牛逼的,问一下现在有多少公司上这个东西了?

2023-04-06 09:55:21 +08:00
 yy306525121

据说是性能追赶 go,内存省一半。

5852 次点击
所在节点    Java
19 条回复
Itoktsnhc
2023-04-06 10:15:03 +08:00
Java 性能赶上 go 那不是倒退?
nekoneko
2023-04-06 10:17:55 +08:00
听别人说还是会出现一些问题的
Nazz
2023-04-06 10:18:15 +08:00
@Itoktsnhc 很自信
Huelse
2023-04-06 10:22:06 +08:00
想编译个 static image 结果麻烦的要死,整了一堆库和源文件
Akitora
2023-04-06 10:22:30 +08:00
之前 Freemarker 都还有兼容问题,不知道现在有没有好点了
oldshensheep
2023-04-06 10:26:46 +08:00
GraalVM 的生态现在基本上是刚刚起步,用的应该不多。
GraalVM 也不是和 go 比性能,因为不用 GraalVM ,Java 性能也比 go 高(就是内存占用比较大),现在内存和不要钱一样,不是什么大问题。
GraalVM 一般用来搞 Serverless ,还有减少启动时间。
如果你编译成 Native ,性能一般会下降的。

因为不是所有的库都兼容 GraalVM ,现在编译一般要 Collect Metadata with the Tracing Agent ,要写一个覆盖所有代码路径的一个测试才能保证编译出来的没问题。
Itoktsnhc
2023-04-06 10:31:40 +08:00
Java 的痛点还是启动时间(预热),和内存占用。
这几个在大的单体应用上都还可,但如果是在类 Serverless 或者容器内部去运行就会很难受,我们内部的 Java 项目在打包 Image 是 go 项目的 4x 体积的基础上,运行内存是 go 的 6x ,实现了可能 2/3 的功能点。除开这些 Java 的绝对性能并不差。
litchinn
2023-04-06 10:32:34 +08:00
在这个时间节点问,我首先假定你指的在 spring boot 3 中使用 graalvm ,打包原生镜像
小工具用没啥问题,主流后端项目目前还上不了
比如国内比较火的 mybatis 目前还不支持 AOT ,打不了包
再如序列化 json 还需要显示声明
实际使用中,它的启动速度确实是优势,内存占用我这边目前没搞过大型项目,但应该是能省的
编译速度是真的拉,这编译速度我觉得比 rust 编译还慢
因此感觉想在大型 web 项目中使用应该还要一段时间,在一些特殊场景中是可以选择的,但是这种场景下可能使用 rust 之类的其他语言更好(只会 java 除外)

大型项目目前想走原生路子首选应该还是 quarkus ,这个我了解不多就不说了
yazinnnn
2023-04-06 10:39:28 +08:00
热知识
1. jit 性能比 aot 性能好
2. java 性能和 go 性能一致
Narcissu5
2023-04-06 10:50:56 +08:00
java 的杀手锏之一就是开放的元空间,可以动态加载类,tomcat 之类都有赖于此,代价就是 AOT 编译复杂。每个语言都有擅长的地方,我觉得这个领域上 java 不太可能超过 go
cubecube
2023-04-06 11:43:25 +08:00
@oldshensheep 我记得看文档,它编译时检测到不支持的情况下,会回退到正常的 jvm 状态,也挺高级的
renyijiu
2023-04-06 11:51:41 +08:00
我们生产用的是 quarkus ,以前用的 micronaut ,都支持 graalvm ,但实际使用还是比较麻烦的,因为对于你的依赖还是有要求的,随意引依赖很容易就不支持编译报错了,另外就是编译真的耗时和吃资源🤣
bootvue
2023-04-06 12:04:36 +08:00
是的 graalvm 适合 java 深度靠向云原生 服务启动嗖的飞起来 对 java 本身性能导致没有什么本质性的改变
yy306525121
2023-04-06 14:57:15 +08:00
感谢大佬的回复,感觉学到了很多😁
yy306525121
2023-04-06 14:58:36 +08:00
@yazinnnn
@Itoktsnhc
哈哈, 原谅我的无知, 对 go 不太了解。
yy306525121
2023-04-06 15:00:47 +08:00
@oldshensheep
@Itoktsnhc
@litchinn
嗯嗯,谢谢大佬, 之前也是一知半解,以为各方面都能完爆呢。
layxy
2023-04-07 09:22:25 +08:00
go 缺少动态加载能力,java 使用 GraalVM 会失去动态加载能力而且性能反而会下降,唯一的优势就是启动变快了
ZhiyuanLin
2023-04-07 09:58:35 +08:00
GraalVM 让 Java 能适合写云函数,低内存占用,秒启动,单 binary 不用和 JVM 一起部署。
yy306525121
2023-04-07 11:18:55 +08:00
@layxy
@ZhiyuanLin
好的, 了解了

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

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

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

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

© 2021 V2EX