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

JDK16 发布, GC 最大暂停时间缩短到 1 毫秒,平均暂停时间 0.05 毫秒,有人体验过没?

  •  2
     
  •   industryhive · 300 天前 · 7983 次点击
    这是一个创建于 300 天前的主题,其中的信息可能已经有所发展或是发生改变。

    除了 GC 的进步之外,我比较关心的还有 project panama 、project valhalla 和 project loom 这三个项目的进展情况,比较可喜的是,project panama 进展顺利,其中外部存储器访问 API 让 java 开发者利用堆外内存不再需要写 unsafe 了。project valhalla 已经初现曙光,今年 9 月份的 JDK17 可能发布 project valhalla 的预览版本,这个是 java 自定义值类型、泛型的重要组成。还有 project loom,java 的协程,目前看来进展不太顺利。。

    鉴于本人还在用 JDK8,还是想问下,有人体验过没?等到 JDK17 发布,我将会从 JDK8 直接迁移到 JDK17,跳过 11 。各位对即将到来的 JDK17 有什么期待?

    50 条回复    2021-04-09 15:28:53 +08:00
    wxw752
        1
    wxw752  
       300 天前   ❤️ 6
    我也想迁移到 17,但是公司不想
    yitingbai
        2
    yitingbai  
       300 天前
    很多公司的业务代码离 jdk8 的性能瓶颈还远得很, 切换带来的麻烦与风险远高于带来的优势. 我们公司技术氛围浓厚, 新项目尝试了 jdk11, 但是老项目实在不敢折腾
    337136897
        3
    337136897  
       300 天前
    我也想迁移到 17,但是公司不想
    brust
        4
    brust  
       300 天前
    我也想迁移到 17,但是公司不想
    lakehylia
        5
    lakehylia  
       300 天前
    除非 api 限制只能使用某个版本,不然已有的项目都不会有动力迁移的。迁移的前提是有 KPI 。
    industryhive
        6
    industryhive  
    OP
       300 天前
    @yitingbai
    @lakehylia 老项目不动,新项目可以用新版本了。
    JB18CM
        7
    JB18CM  
       300 天前
    我也想迁移到 Kotlin,但是公司不想
    dqzcwxb
        8
    dqzcwxb  
       300 天前
    不迁移,所以不学习也不关心
    th00000
        9
    th00000  
       300 天前
    ZGC 在之前几个版本就已经可以用了, 针对特大内存有奇效, 一般服务器用起来也挺爽, 主要是零配置跑的就很快, 对于一般的服务器现在的 G1 表现也已经够好了。
    xbh1794970183564
        10
    xbh1794970183564  
       300 天前
    小公司没必要, 大公司成本太大
    industryhive
        11
    industryhive  
    OP
       300 天前
    @th00000 G1 生不逢时啊,java9 之后才可用,但是没几个版本又碰上了 ZGC 。。。
    dbpe
        12
    dbpe  
       300 天前
    所以 JVM GC 调优还是否有必要呢...人生苦短..我选择 ZGC/G1
    dbpe
        13
    dbpe  
       300 天前
    @industryhive java8 也有了..但是有问题..我记得某代不能回收释放(重启破万法).到 java11 才解决...
    dbpe
        14
    dbpe  
       300 天前
    @th00000 前几代的问题好像是会降低吞吐量..这个问题到 Java16 也搞定了
    th00000
        15
    th00000  
       300 天前
    @industryhive #11 何为生不逢时? JDK 11 作为 LTS 版本, G1 有最广泛的应用, 一直都在进行大量的优化, 现在也可以做到很少的配置就能有优秀的表现。即使是 JDK 17 LTS 之后, 也有不可替代的分量。
    Jooooooooo
        16
    Jooooooooo  
       300 天前
    ZGC 这个往后普及开来感觉是给 java 带来第二次生命.
    th00000
        17
    th00000  
       300 天前   ❤️ 1
    @dbpe #14 吞吐量、响应时间、内存占用三者不可兼得, 只能取其二, G1 的默认配置在吞吐量表现上稍差是为了换取另外两者的优秀表现, 如果需要大吞吐量比如 Logstash 这种同时不想进行精细调整的话, 则可以选择 CMS
    industryhive
        18
    industryhive  
    OP
       300 天前
    @Jooooooooo 我认为给 Java 带来第二次生命的不是 ZGC,而是 project panama/project loom/project valhalla,尤其是 project panama 和 project valhalla,这两个项目可以让 java 程序逼近物理机的性能极限,GC 反而成了次要的了。
    someonedeng
        19
    someonedeng  
       300 天前
    等一个 java17, 目前的项目还是 jdk8
    sadfQED2
        20
    sadfQED2  
       300 天前 via Android
    我司连 G1 都还没用上呢,17 不知道哪年才用的上
    bthulu
        21
    bthulu  
       300 天前
    ZGC 虚拟内存占用翻三倍, 一堆相关监控软件及 linux 内核不针对性升级处理, 谁敢用
    mlcq
        22
    mlcq  
       300 天前
    @dbpe 有啥问题,jdk8 已经可以用了,只是不是默认的垃圾收集器而且,怎么可能存在不能回收的问题,只是后期版本会更优化而已
    Vindroid
        23
    Vindroid  
       300 天前
    不是你想不想,而是公司让不让,以及有没有做好跑路的准备。
    只要公司内大神没力推 JDK 新版本,我就不会去动它。
    icyalala
        24
    icyalala  
       300 天前   ❤️ 2
    大家都想要获得它的特性,但是不愿意承担带来的风险
    dbpe
        25
    dbpe  
       300 天前
    @mlcq 具体我得找下..当初我在阿里 JVM 大佬的公众号上了解的.大意就是有效部分的内存无法回收,JAVA11 解决了.
    ztechstack
        26
    ztechstack  
       300 天前
    面向 spring 编程,坐等 spring 支持。
    mlcq
        27
    mlcq  
       300 天前
    @dbpe 你这个是道听途说而已,有些公司线上都是 jdk8 + g1 的
    jason19659
        28
    jason19659  
       300 天前
    @industryhive #10 g1 1.8 就可以用了吧
    dgsrz
        29
    dgsrz  
       300 天前
    我也想迁移到 17,但是公司不想
    yanzhiling2001
        30
    yanzhiling2001  
       300 天前
    springboot 用啥我用啥
    BBCCBB
        31
    BBCCBB  
       300 天前
    loom 真的是遥遥无期.
    Lemeng
        32
    Lemeng  
       300 天前
    一般公司动起来得花些人力,非不必要,不会动的
    早想了,没办法
    youyang
        33
    youyang  
       300 天前
    我们还是 jdk8 + cms 呢
    zhuangzhuang1988
        34
    zhuangzhuang1988  
       300 天前
    zhuangzhuang1988
        35
    zhuangzhuang1988  
       300 天前
    ![a54d82377580e2e2c63d13ccc2c2a728.png]( https://xn--wcso9o.xn--fiqs8s/images/a54d82377580e2e2c63d13ccc2c2a728.png)
    0312birdzhang
        36
    0312birdzhang  
       300 天前 via iPhone
    老版本 es 用上 G1GC 已经两三个月没崩了( doge
    Goooogle
        37
    Goooogle  
       300 天前
    在线上跑了一周,堆大小 2G
    平均暂停时间 0.05ms 一点也不夸张,测试显示最小也就 0.025
    最大暂停时间测试显示有点抖,从几 ms 到几十 ms

    phase: pause mark end 0.000 / 0.000 0.013 / 0.036 0.013 / 0.210 0.013 / 0.242 ms
    [Phase: Pause Mark Start 0.000 / 0.000 0.027 / 0.054 0.021 / 0.218 0.025 / 6.534 ms
    Phase: Pause Relocate Start 0.000 / 0.000 0.012 / 0.053 0.009 / 0.086 0.009 / 0.266 ms
    Subphase: Pause Mark Try Complete 0.000 / 0.000 0.000 / 0.000 0.006 / 0.013 0.004 / 0.063 ms
    Goooogle
        38
    Goooogle  
       300 天前
    格式乱了 补个图
    i.imgur.com/92rIInV.png
    intmax2147483647
        39
    intmax2147483647  
       300 天前
    我也想迁移到 TypeScript,但是公司...也想[🐶]。用啥 Java...
    matrix67
        40
    matrix67  
       300 天前   ❤️ 1
    这又让我想起了这篇雄文 < IT runs on Java 8 > https://veekaybee.github.io/2019/05/10/java8/

    hn: https://news.ycombinator.com/item?id=19877916
    cco
        41
    cco  
       300 天前
    一步到 17,结果发现要和其他项目集成,然后又发现他们的项目用的 1.6,各种包老的不行,你还得引用他们的依赖,到时候哭去吧。建议到 11 就行,一步一步来,步子大了容易扯到蛋。
    fyooo
        42
    fyooo  
       300 天前
    @cco 老哥看来是过来人
    cubecube
        43
    cubecube  
       300 天前
    很多工具集不支持也没办法呀。比如 idea 在 jdk16 也跑步起来 doge
    arloor
        44
    arloor  
       300 天前
    组里大佬分享过,然后看了美团技术博客的 ZGC 文章,自己的小项目就用起来了
    https://tech.meituan.com/2020/08/06/new-zgc-practice-in-meituan.html

    PS:编译使用 jdk8,运行使用 jdk11+就行了,仅用少量 sun 的类改变了。

    PS:为啥一个 ide 也要在 jdk16 跑起来呢?等到 6 个月后 jdk17 发布,jetbrains 的 jbr 肯定也升到 jdk17 版本了。别说 idea 不跟 jdk 版本
    q149072205
        45
    q149072205  
       299 天前
    jdk8 再战个十年八年不是问题。。
    lewis89
        46
    lewis89  
       299 天前
    @th00000 老哥,我请教一下,ZGC 在停顿优化的问题的上

    是不是用 mfence 做可见性,这样在标记整理 标记复制的时候 用 mfence 避免因为引用对象的内存地址发生改变 而需要暂停业务线程的时间..

    据我所知 mfence 这些可见性的指令 开销很大.. 会让很多 L1 L2 失效吧..
    shawn102400
        47
    shawn102400  
       298 天前
    @arloor 这不是脱了裤子放屁多此一举么,用 jdk11 运行又用不了 11 的新特性,出于啥想法。
    arloor
        48
    arloor  
       297 天前
    @shawn102400 你的头怕是塞在你裤子里。jdk11 的 jvm 有 ZGC,jdk8 有吗?喷很简单,SB 也很简单
    shawn102400
        49
    shawn102400  
       291 天前
    @arloor 笑了,不知道还以为 jdk8 满足不了你这几亿并发量的项目呢,原来是几个人访问的小项目也想着搞 jvm 优化。
    arloor
        50
    arloor  
       289 天前
    @shawn102400 满嘴喷粪,您请继续
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2453 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:03 · PVG 20:03 · LAX 04:03 · JFK 07:03
    ♥ Do have faith in what you're doing.