V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yy306525121
V2EX  ›  Java

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

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

    据说是性能追赶 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   ·   我们的愿景   ·   实用小工具   ·   3057 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:00 · PVG 19:00 · LAX 04:00 · JFK 07:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.