
据说是性能追赶 go,内存省一半。
1 Itoktsnhc Apr 6, 2023 Java 性能赶上 go 那不是倒退? |
2 nekoneko Apr 6, 2023 听别人说还是会出现一些问题的 |
4 Huelse Apr 6, 2023 想编译个 static image 结果麻烦的要死,整了一堆库和源文件 |
5 Akitora Apr 6, 2023 via Android 之前 Freemarker 都还有兼容问题,不知道现在有没有好点了 |
6 oldshensheep Apr 6, 2023 GraalVM 的生态现在基本上是刚刚起步,用的应该不多。 GraalVM 也不是和 go 比性能,因为不用 GraalVM ,Java 性能也比 go 高(就是内存占用比较大),现在内存和不要钱一样,不是什么大问题。 GraalVM 一般用来搞 Serverless ,还有减少启动时间。 如果你编译成 Native ,性能一般会下降的。 因为不是所有的库都兼容 GraalVM ,现在编译一般要 Collect Metadata with the Tracing Agent ,要写一个覆盖所有代码路径的一个测试才能保证编译出来的没问题。 |
7 Itoktsnhc Apr 6, 2023 Java 的痛点还是启动时间(预热),和内存占用。 这几个在大的单体应用上都还可,但如果是在类 Serverless 或者容器内部去运行就会很难受,我们内部的 Java 项目在打包 Image 是 go 项目的 4x 体积的基础上,运行内存是 go 的 6x ,实现了可能 2/3 的功能点。除开这些 Java 的绝对性能并不差。 |
8 litchinn Apr 6, 2023 在这个时间节点问,我首先假定你指的在 spring boot 3 中使用 graalvm ,打包原生镜像 小工具用没啥问题,主流后端项目目前还上不了 比如国内比较火的 mybatis 目前还不支持 AOT ,打不了包 再如序列化 json 还需要显示声明 实际使用中,它的启动速度确实是优势,内存占用我这边目前没搞过大型项目,但应该是能省的 编译速度是真的拉,这编译速度我觉得比 rust 编译还慢 因此感觉想在大型 web 项目中使用应该还要一段时间,在一些特殊场景中是可以选择的,但是这种场景下可能使用 rust 之类的其他语言更好(只会 java 除外) 大型项目目前想走原生路子首选应该还是 quarkus ,这个我了解不多就不说了 |
9 yazinnnn Apr 6, 2023 热知识 1. jit 性能比 aot 性能好 2. java 性能和 go 性能一致 |
10 Narcissu5 Apr 6, 2023 java 的杀手锏之一就是开放的元空间,可以动态加载类,tomcat 之类都有赖于此,代价就是 AOT 编译复杂。每个语言都有擅长的地方,我觉得这个领域上 java 不太可能超过 go |
11 cubecube Apr 6, 2023 @oldshensheep 我记得看文档,它编译时检测到不支持的情况下,会回退到正常的 jvm 状态,也挺高级的 |
12 renyijiu Apr 6, 2023 我们生产用的是 quarkus ,以前用的 micronaut ,都支持 graalvm ,但实际使用还是比较麻烦的,因为对于你的依赖还是有要求的,随意引依赖很容易就不支持编译报错了,另外就是编译真的耗时和吃资源 |
13 bootvue Apr 6, 2023 是的 graalvm 适合 java 深度靠向云原生 服务启动嗖的飞起来 对 java 本身性能导致没有什么本质性的改变 |
14 yy306525121 OP 感谢大佬的回复,感觉学到了很多 |
15 yy306525121 OP |
16 yy306525121 OP |
17 layxy Apr 7, 2023 go 缺少动态加载能力,java 使用 GraalVM 会失去动态加载能力而且性能反而会下降,唯一的优势就是启动变快了 |
18 ZhiyuanLin Apr 7, 2023 GraalVM 让 Java 能适合写云函数,低内存占用,秒启动,单 binary 不用和 JVM 一起部署。 |
19 yy306525121 OP |