JDK16 发布, GC 最大暂停时间缩短到 1 毫秒,平均暂停时间 0.05 毫秒,有人体验过没? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
industryhive
V2EX    Java

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

  •  2
     
  •   industryhive 2021-03-29 10:01:54 +08:00 9973 次点击
    这是一个创建于 1708 天前的主题,其中的信息可能已经有所发展或是发生改变。

    除了 GC 的进步之外,我比较关心的还有 project panama 、project valhalla 和 project loo 这三个项目的进展情况,比较可喜的是,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
    rockddd
        1
    rockddd  
       2021-03-29 10:02:52 +08:00   6
    我也想迁移到 17,但是公司不想
    yitingbai
        2
    yitingbai  
       2021-03-29 10:07:21 +08:00
    很多公司的业务代码离 jdk8 的性能瓶颈还远得很, 切换带来的麻烦与风险远高于带来的优势. 我们公司技术氛围浓厚, 新项目尝试了 jdk11, 但是老项目实在不敢折腾
    337136897
        3
    337136897  
       2021-03-29 10:07:22 +08:00
    我也想迁移到 17,但是公司不想
    brust
        4
    brust  
       2021-03-29 10:08:20 +08:00
    我也想迁移到 17,但是公司不想
    lakehylia
        5
    lakehylia  
       2021-03-29 10:10:43 +08:00
    除非 api 限制只能使用某个版本,不然已有的项目都不会有动力迁移的。迁移的前提是有 KPI 。
    industryhive
        6
    industryhive  
    OP
       2021-03-29 10:11:51 +08:00
    @yitingbai
    @lakehylia 老项目不动,新项目可以用新版本了。
    JB18CM
        7
    JB18CM  
      &bsp;2021-03-29 10:12:10 +08:00
    我也想迁移到 Kotlin,但是公司不想
    dqzcwxb
        8
    dqzcwxb  
       2021-03-29 10:15:24 +08:00
    不迁移,所以不学习也不关心
    th00000
        9
    th00000  
       2021-03-29 10:15:47 +08:00
    ZGC 在之前几个版本就已经可以用了, 针对特大内存有奇效, 一般服务器用起来也挺爽, 主要是零配置跑的就很快, 对于一般的服务器现在的 G1 表现也已经够好了。
    xbh1794970183564
        10
    xbh1794970183564  
       2021-03-29 10:16:48 +08:00
    小公司没必要, 大公司成本太大
    industryhive
        11
    industryhive  
    OP
       2021-03-29 10:17:14 +08:00
    @th00000 G1 生不逢时啊,java9 之后才可用,但是没几个版本又碰上了 ZGC 。。。
    dbpe
        12
    dbpe  
       2021-03-29 10:22:54 +08:00
    所以 JVM GC 调优还是否有必要呢...人生苦短..我选择 ZGC/G1
    dbpe
        13
    dbpe  
       2021-03-29 10:23:35 +08:00
    @industryhive java8 也有了..但是有问题..我记得某代不能回收释放(重启破万法).到 java11 才解决...
    dbpe
        14
    dbpe  
       2021-03-29 10:24:19 +08:00
    @th00000 前几代的问题好像是会降低吞吐量..这个问题到 Java16 也搞定了
    th00000
        15
    th00000  
       2021-03-29 10:24:49 +08:00
    @industryhive #11 何为生不逢时? JDK 11 作为 LTS 版本, G1 有最广泛的应用, 一直都在进行大量的优化, 现在也可以做到很少的配置就能有优秀的表现。即使是 JDK 17 LTS 之后, 也有不可替代的分量。
    Jooooooooo
        16
    Jooooooooo  
       2021-03-29 10:29:44 +08:00
    ZGC 这个往后普及开来感觉是给 java 带来第二次生命.
    th00000
        17
    th00000  
       2021-03-29 10:30:35 +08:00   1
    @dbpe #14 吞吐量、响应时间、内存占用三者不可兼得, 只能取其二, G1 的默认配置在吞吐量表现上稍差是为了换取另外两者的优秀表现, 如果需要大吞吐量比如 Logstash 这种同时不想进行精细调整的话, 则可以选择 CMS
    industryhive
        18
    industryhive  
    OP
       2021-03-29 10:37:35 +08:00
    @Jooooooooo 我认为给 Java 带来第二次生命的不是 ZGC,而是 project panama/project loom/project valhalla,尤其是 project panama 和 project valhalla,这两个项目可以让 java 程序逼近物理机的性能极限,GC 反而成了次要的了。
    someonedeng
        19
    someonedeng  
       2021-03-29 10:39:56 +08:00
    等一个 java17, 目前的项目还是 jdk8
    sadfQED2
        20
    sadfQED2  
       2021-03-29 10:40:26 +08:00 via Android
    我司连 G1 都还没用上呢,17 不知道哪年才用的上
    bthulu
        21
    bthulu  
       2021-03-29 10:40:52 +08:00
    ZGC 虚拟内存占用翻三倍, 一堆相关监控软件及 linux 内核不针对性升级处理, 谁敢用
    mlcq
      &nsp; 22
    mlcq  
       2021-03-29 10:57:52 +08:00
    @dbpe 有啥问题,jdk8 已经可以用了,只是不是默认的垃圾收集器而且,怎么可能存在不能回收的问题,只是后期版本会更优化而已
    Vindroid
        23
    Vindroid  
       2021-03-29 11:06:40 +08:00
    不是你想不想,而是公司让不让,以及有没有做好跑路的准备。
    只要公司内大神没力推 JDK 新版本,我就不会去动它。
    icyalala
        24
    icyalala  
       2021-03-29 11:12:24 +08:00   2
    大家都想要获得它的特性,但是不愿意承担带来的风险
    dbpe
        25
    dbpe  
       2021-03-29 11:16:43 +08:00
    @mlcq 具体我得找下..当初我在阿里 JVM 大佬的公众号上了解的.大意就是有效部分的内存无法回收,JAVA11 解决了.
    zliea
        26
    zliea  
       2021-03-29 11:18:30 +08:00
    面向 spring 编程,坐等 spring 支持。
    mlcq
        27
    mlcq  
       2021-03-29 11:25:06 +08:00
    @dbpe 你这个是道听途说而已,有些公司线上都是 jdk8 + g1 的
    jason19659
        28
    jason19659  
       2021-03-29 11:26:27 +08:00
    @industryhive #10 g1 1.8 就可以用了吧
    dgsrz
        29
    dgsrz  
       2021-03-29 11:27:25 +08:00
    我也想迁移到 17,但是公司不想
    40EaE5uJO3Xt1VVa
        30
    40EaE5uJO3Xt1VVa  
       2021-03-29 11:30:03 +08:00
    springboot 用啥我用啥
    BBCCBB
        31
    BBCCBB  
       2021-03-29 11:37:24 +08:00
    loom 真的是遥遥无期.
    Lemeng
        32
    Lemeng  
       2021-03-29 11:47:01 +08:00
    一般公司动起来得花些人力,非不必要,不会动的
    早想了,没办法
    youyang
        33
    youyang  
       2021-03-29 11:59:13 +08:00
    我们还是 jdk8 + cms 呢
    zhuangzhuang1988
        34
    zhuangzhuang1988  
       2021-03-29 12:18:12 +08:00
    zhuangzhuang1988
        35
    zhuangzhuang1988  
       2021-03-29 12:21:01 +08:00
    ![a54d82377580e2e2c63d13ccc2c2a728.png]( https://xn--wcso9o.xn--fiqs8s/images/a54d82377580e2e2c63d13ccc2c2a728.png)
    1daydayde
        36
    1daydayde  
       2021-03-29 12:55:50 +08:00 via iPhone
    老版本 es 用上 G1GC 已经两三个月没崩了( doge
    Goooogle
        37
    Goooogle  
       2021-03-29 13:06:58 +08:00
    在线上跑了一周,堆大小 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  
       2021-03-29 13:08:40 +08:00
    格式乱了 补个图
    i.imgur.com/92rIInV.png
    intmax2147483647
        39
    intmax2147483647  
       2021-03-29 13:48:44 +08:00
    我也想迁移到 TypeScript,但是公司...也想[]。用啥 Java...
    matrix67
        40
    matrix67  
       2021-03-29 14:06:00 +08:00   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  
       2021-03-29 16:57:18 +08:00
    一步到 17,结果发现要和其他项目集成,然后又发现他们的项目用的 1.6,各种包老的不行,你还得引用他们的依赖,到时候哭去吧。建议到 11 就行,一步一步来,步子大了容易扯到蛋。
    fyooo
        42
    fyooo  
       2021-03-29 17:44:02 +08:00
    @cco 老哥看来是过来人
    cubecube
        43
    cubecube  
       2021-03-29 19:20:53 +08:00
    很多工具集不支持也没办法呀。比如 idea 在 jdk16 也跑步起来 doge
    arloor
        44
    arloor  
       2021-03-29 19:36:44 +08:00
    组里大佬分享过,然后看了美团技术博客的 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  
       2021-03-30 11:25:41 +08:00
    jdk8 再战个十年八年不是问题。。
    lewis89
        46
    lewis89  
       2021-03-30 14:46:06 +08:00
    @th00000 老哥,我请教一下,ZGC 在停顿优化的问题的上

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

    据我所知 mfence 这些可见性的指令 开销很大.. 会让很多 L1 L2 失效吧..
    shawn102400
        47
    shawn102400  
       2021-03-31 17:14:42 +08:00
    @arloor 这不是脱了裤子放屁多此一举么,用 jdk11 运行又用不了 11 的新特性,出于啥想法。
    arloor
        48
    arloor  
       2021-04-01 10:47:45 +08:00
    @shawn102400 你的头怕是塞在你裤子里。jdk11 的 jvm 有 ZGC,jdk8 有吗?喷很简单,SB 也很简单
    shawn102400
        49
    shawn102400  
       2021-04-07 16:47:13 +08:00
    @arloor 笑了,不知道还以为 jdk8 满足不了你这几亿并发量的项目呢,原来是几个人访问的小项目也想着搞 jvm 优化。
    arloor
        50
    arloor  
       2021-04-09 15:28:53 +08:00
    @shawn102400 满嘴喷粪,您请继续
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2902 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 13:51 PVG 21:51 LAX 05:51 JFK 08:51
    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