清明节在家看了一下 GraalVM,感觉挺牛逼的,问一下现在有多少公司上这个东西了? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yy306525121
V2EX    Java

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

  •  
  •   yy306525121 2023-04-06 09:55:21 +08:00 6902 次点击
    这是一个创建于 951 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    19 条回复    2023-04-07 11:18:55 +08:00
    Itoktsnhc
        1
    Itoktsnhc  
       2023-04-06 10:15:03 +08:00   7
    Java 性能赶上 go 那不是倒退?
    nekoneko
        2
    nekoneko  
       2023-04-06 10:17:55 +08:00
    听别人说还是会出现一些问题的
    Nazz
        3
    Nazz  
       2023-04-06 10:18:15 +08:00   1
    @Itoktsnhc 很自信
    Huelse
        4
    Huelse  
       2023-04-06 10:22:06 +08:00
    想编译个 static image 结果麻烦的要死,整了一堆库和源文件
    Akitora
        5
    Akitora  
       2023-04-06 10:22:30 +08:00 via Android
    之前 Freemarker 都还有兼容问题,不知道现在有没有好点了
    oldshensheep
        6
    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
        7
    Itoktsnhc  
       2023-04-06 10:31:40 +08:00
    Java 的痛点还是启动时间(预热),和内存占用。
    这几个在大的单体应用上都还可,但如果是在类 Serverless 或者容器内部去运行就会很难受,我们内部的 Java 项目在打包 Image 是 go 项目的 4x 体积的基础上,运行内存是 go 的 6x ,实现了可能 2/3 的功能点。除开这些 Java 的绝对性能并不差。
    litchinn
        8
    litchinn  
       2023-04-06 10:32:34 +08:00
    在这个时间节点问,我首先假定你指的在 spring boot 3 中使用 graalvm ,打包原生镜像
    小工具用没啥问题,主流后端项目目前还上不了
    比如国内比较火的 mybatis 目前还不支持 AOT ,打不了包
    再如序列化 json 还需要显示声明
    实际使用中,它的启动速度确实是优势,内存占用我这边目前没搞过大型项目,但应该是能省的
    编译速度是真的拉,这编译速度我觉得比 rust 编译还慢
    因此感觉想在大型 web 项目中使用应该还要一段时间,在一些特殊场景中是可以选择的,但是这种场景下可能使用 rust 之类的其他语言更好(只会 java 除外)

    大型项目目前想走原生路子首选应该还是 quarkus ,这个我了解不多就不说了
    yazinnnn
        9
    yazinnnn  
       2023-04-06 10:39:28 +08:00
    热知识
    1. jit 性能比 aot 性能好
    2. java 性能和 go 性能一致
    Narcissu5
        10
    Narcissu5  
       2023-04-06 10:50:56 +08:00
    java 的杀手锏之一就是开放的元空间,可以动态加载类,tomcat 之类都有赖于此,代价就是 AOT 编译复杂。每个语言都有擅长的地方,我觉得这个领域上 java 不太可能超过 go
    cubecube
        11
    cubecube  
       2023-04-06 11:43:25 +08:00
    @oldshensheep 我记得看文档,它编译时检测到不支持的情况下,会回退到正常的 jvm 状态,也挺高级的
    renyijiu
        12
    renyijiu  
       2023-04-06 11:51:41 +08:00
    我们生产用的是 quarkus ,以前用的 micronaut ,都支持 graalvm ,但实际使用还是比较麻烦的,因为对于你的依赖还是有要求的,随意引依赖很容易就不支持编译报错了,另外就是编译真的耗时和吃资源
    bootvue
        13
    bootvue  
       2023-04-06 12:04:36 +08:00
    是的 graalvm 适合 java 深度靠向云原生 服务启动嗖的飞起来 对 java 本身性能导致没有什么本质性的改变
    yy306525121
        14
    yy306525121  
    OP
       2023-04-06 14:57:15 +08:00
    感谢大佬的回复,感觉学到了很多
    yy306525121
        15
    yy306525121  
    OP
       2023-04-06 14:58:36 +08:00
    @yazinnnn
    @Itoktsnhc
    哈哈, 原谅我的无知, 对 go 不太了解。
    yy306525121
        16
    yy306525121  
    OP
       2023-04-06 15:00:47 +08:00
    @oldshensheep
    @Itoktsnhc
    @litchinn
    嗯嗯,谢谢大佬, 之前也是一知半解,以为各方面都能完爆呢。
    layxy
        17
    layxy  
       2023-04-07 09:22:25 +08:00
    go 缺少动态加载能力,java 使用 GraalVM 会失去动态加载能力而且性能反而会下降,唯一的优势就是启动变快了
    ZhiyuanLin
        18
    ZhiyuanLin  
       2023-04-07 09:58:35 +08:00
    GraalVM 让 Java 能适合写云函数,低内存占用,秒启动,单 binary 不用和 JVM 一起部署。
    yy306525121
        19
    yy306525121  
    OP
       2023-04-07 11:18:55 +08:00
    @layxy
    @ZhiyuanLin
    好的, 了解了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5689 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 02:53 PVG 10:53 LAX 18:53 JFK 21:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86