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

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

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

    除了 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  
       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  
       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
        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)
    0312birdzhang
        36
    0312birdzhang  
       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   ·   实用小工具   ·   1186 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 18:34 · PVG 02:34 · LAX 10:34 · JFK 13:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.