JDK 23 发布了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Ayanokouji
V2EX    程序员

JDK 23 发布了

  •  
  •   Ayanokouji 2024-09-18 08:52:34 +08:00 16823 次点击
    这是一个创建于 393 天前的主题,其中的信息可能已经有所发展或是发生改变。
    此版本是非 lts 版本,主要特性是决定了 zgc 发展方向

    本帖不欢迎刷 jdk8 梗

    Features

    455: Primitive Types in Patterns, instanceof, and switch (Preview)
    466: Class-File API (Second Preview)
    467: Markdown Documentation Comments
    469: Vector API (Eighth Incubator)
    473: Stream Gatherers (Second Preview)
    471: Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal
    474: ZGC: Generational Mode by Default
    476: Module Import Declarations (Preview)
    477: Implicitly Declared Classes and Instance Main Methods (Third Preview)
    480: Structured Concurrency (Third Preview)
    481: Scoped Values (Third Preview)
    482: Flexible Constructor Bodies (Second Preview)

    https://openjdk.org/projects/jdk/23/
    113 条回复    2024-09-20 15:31:34 +08:00
    1  2  
    Creamliu
        1
    Creamliu  
       2024-09-18 09:06:48 +08:00 via iPhone
    这个月刚从 jdk8 升级到 jdk21 ,还没上生产。
    huihuiHK
        2
    huihuiHK  
       2024-09-18 09:08:22 +08:00   1
    等一波 java8 党
    yolee599
        3
    yolee599  
       2024-09-18 09:10:51 +08:00 via Android   1
    jdk8 永远的神,从桌面到安卓再到后台服务,一个版本就够了
    cheng6563
        4
    cheng6563  
       2024-09-18 09:11:30 +08:00
    字符串模板还没定稿吗
    chendy
        5
    a href="/member/chendy" class="dark">chendy  
       2024-09-18 09:12:11 +08:00
    J8 人不请自来,公司项目,狗都不升,java7 主流,java8 先进,java11 动不动就 build 报错没人管,java17 的项目已经凉了

    下班回去有空,自己的小玩具升级一手玩一玩就行了
    wxw752
        6
    wxw752  
       2024-09-18 09:12:32 +08:00   12
    各位是真不审题啊,OP 说了本帖不欢迎刷 jdk8 梗。

    现在那些中间件稍微新点的版本早不支持 8 了,你们是怎么够用的
    ted05
        7
    ted05  
       2024-09-18 09:12:34 +08:00
    我已经用上 17 了
    Mogugugugu
        8
    Mogugugugu  
       2024-09-18 09:14:22 +08:00
    to B 的项目已经开始慢慢的升 17 了,to G 的项目还不行,还得再等几年。
    DengDDDD
        9
    DengDDDD  
       2024-09-18 09:15:18 +08:00
    竟然支持 Markdown 写注释了
    wysnxzm
        10
    wysnxzm  
       2024-09-18 09:15:50 +08:00
    把落后挂嘴边的习惯有时候得改改
    twofox
        11
    twofox  
       2024-09-18 09:21:11 +08:00
    21 我已经用起来了
    Goooooos
        12
    Goooooos  
       2024-09-18 09:21:52 +08:00
    还是等下个 LTS ,这个版本基本都是 Preview
    TanKuku
        13
    TanKuku  
       2024-09-18 09:22:35 +08:00 via Android
    @cheng6563 好像是撤销了,没了
    Greendays
        14
    Greendays  
       2024-09-18 09:23:20 +08:00
    半年前把公司的项目升级到了 JDK21
    dcsuibian
        15
    dcsuibian  
       2024-09-18 09:24:16 +08:00
    能上 21 的我都上 21 了
    L0L
        16
    L0L  
       2024-09-18 09:24:18 +08:00
    流的这个好像有点意思
    dragondove
        17
    dragondove  
       2024-09-18 09:24:36 +08:00
    感觉改变不大,大部分都是预览特性,zgc 大部分情况表现不如 g1 ,该用 g1 还是用 g1 。markdown 这个感觉是追潮流了,python 的文档之前就支持了 markdown ,不过我个人觉得不是很必要。现在就想着字符串模板什么时候重新设计好,希望不会比 jdk21 上的预览版本差多少。
    jptx
        18
    jptx  
       2024-09-18 09:27:14 +08:00
    Vector API 都第八次孵化了
    salmon5
        19
    salmon5  
       2024-09-18 09:29:08 +08:00
    可以 java -XX:+UseZGC 用分带 ZGC 了
    Huelse
        20
    Huelse  
       2024-09-18 09:31:08 +08:00
    @cheng6563 按这份邮件的意思是想做个更好的设计所以推迟了
    https://mail.openjdk.org/pipermail/amber-spec-experts/2024-April/004106.html
    salmon5
        21
    salmon5  
       2024-09-18 09:31:27 +08:00
    https://github.com/openjdk/jdk/pull/17060 这个“低级”bug 也修复了,从 java8-23
    salmon5
        22
    salmon5  
       2024-09-18 09:32:36 +08:00
    @salmon5 #21
    修复的并不完美,应该用\n ,而不是\r\n
    typing
        23
    typing  
       2024-09-18 09:33:01 +08:00 via iPhone
    我连 jdk8 都没用过,只记得 jdk 1.42
    ( java 不是我工作/常用语言)
    xubeiyou
        24
    xubeiyou  
       2024-09-18 09:34:37 +08:00
    用 17 的路过- - 感觉特么是不是都没人用 17 都是 21 了?
    windghoul
        25
    windghoul  
       2024-09-18 09:35:11 +08:00
    @dragondove zgc 对比 g1 的数据文章有吗大佬
    TWorldIsNButThis
        26
    TWorldIsNButThis  
       2024-09-18 09:37:47 +08:00 via iPhone
    看了下项目组的 jdk 升 17 的需求已经有人在做了,也就一个点
    fffq
        27
    fffq  
       2024-09-18 09:44:58 +08:00
    你发任你发 我用 java8
    yty2012g
        28
    yty2012g  
       2024-09-18 09:45:23 +08:00
    @windghoul 我自己使用情况来看。throughput 的影响,大概 ZGC 分代是 4.x%,G1 是 1.x%。延迟的话,不用说肯定是 ZGC ,基本就是 0ms 。footprint 没测过。我这边服务的堆是 8G 的。目前用的是 JDK 22
    SuperManNoPain
        29
    SuperManNoPain  
       2024-09-18 09:46:49 +08:00
    生态能及时升级就好了,看样子再过一两年新项目使用 jdk21 基本没啥问题了
    clf
        30
    clf  
       2024-09-18 09:52:35 +08:00
    已经 jdk17 了,主要还是看 spring 等的选择。
    zhouhu
        31
    zhouhu  
       2024-09-18 09:54:23 +08:00   1
    目前使用 G1 是比较好的,G1 在 latency 、throughput 、footprint 有很好的平衡。追求 throughput 使用 parallel GC ,追求 latency 使用 ZGC 。
    zhouhu
        32
    zhouhu  
       2024-09-18 09:57:27 +08:00
    推荐一个博主 tschatzl ,在 oracle 做 gc 优化的,他主要 g1 的优化。
    https://tschatzl.github.io/
    interim
        33
    interim  
       2024-09-18 09:58:07 +08:00
    我司的重构项目已经上 jdk21 了
    windghoul
        34
    windghoul  
       2024-09-18 10:00:11 +08:00
    @yty2012g 感谢,我们现在全面使用 jdk17 + zgc ,目前表现效果还可以,之后再充分测试一下,有什么推荐的资料看看吗?
    Rorysky
        36
    Rorysky  
       2024-09-18 10:04:35 +08:00
    @yty2012g 从应用层说,和 gc 的语言没多大区别了(性能上)
    Rorysky
        37
    Rorysky  
       2024-09-18 10:08:27 +08:00
    @wxw752 任何产品都有生命周期,对于末期的(或者说只做维护修复 bug )产品不升级才是明智选择,因为从盈利上将已经不值得投入优化了
    wysnxzm
        38
    wysnxzm  
       2024-09-18 10:09:34 +08:00   1
    @dragondove #17
    551/35298=0.015
    705/18015=0.039
    minor gc 平均时间 0.02ms 不到
    major gc 平均时间 0.04ms 不到
    注意时间单位是毫秒不是秒,还需要考虑吗少年?
    yty2012g
        39
    yty2012g  
       2024-09-18 10:10:54 +08:00
    @windghoul #34 JDK17 的是不分代的 ZGC ,吞吐量的影响会更大一点,我自己实测是 7.x%左右,如果对延迟要求不是特别高,JDK17 建议使用 G1 吧
    yty2012g
        40
    yty2012g  
       2024-09-18 10:11:57 +08:00   1
    @Rorysky #36 差不多,在充分预热的情况下,高版本 gc 的吞吐量影响几乎可以忽略不计,像是我在 jdk22 用 G1 ,火焰图基本快看不到 GC 的开销了
    jackmod
        41
    jackmod  
       2024-09-18 10:12:17 +08:00
    我们那边也突然开始 17+gradle8+spring3 了
    以前连 spring 都不是,非常古老的玩意
    4xxx
        42
    4xxx  
       2024-9-18 10:13:36 +08:00
    j8yyds
    windghoul
        43
    windghoul  
       2024-09-18 10:15:18 +08:00
    @yty2012g #39 感谢
    wxw752
        44
    wxw752  
       2024-09-18 10:24:24 +08:00
    @adoal #35 我也遇到过这样的公司,一般 HR 描述技术栈比较老,我就说不合适然后挂电话了。
    wxw752
        45
    wxw752  
       2024-09-18 10:24:50 +08:00
    @Rorysky #37 to B 真是干不了一点,我怕干几年人干废了。
    zhouhu
        46
    zhouhu  
       2024-09-18 10:28:01 +08:00
    @yty2012g 看到很多大佬对 gc 的评论
    ZZ74
        48
    ZZ74  
       2024-09-18 10:33:18 +08:00
    多少有点 java 程序性能调优的经验,第一条优化建议就是升级 JDK
    cmlx1014
        49
    cmlx1014  
       2024-09-18 10:35:35 +08:00
    jdk17 苟个十年再找稳定版本吧。。
    kiroter
        50
    kiroter  
       2024-09-18 10:47:59 +08:00
    用 kt 的都 17 了吧
    cslive
        51
    cslive  
       2024-09-18 10:54:28 +08:00   1
    别急,springbooot 会出手
    iamwin
        52
    iamwin  
       2024-09-18 10:55:36 +08:00
    国内已经死在 java8 了
    storyxc
        53
    storyxc  
       2024-09-18 11:04:59 +08:00
    自己用的项目目前在用 17 ,公司这种项目 真的升不动。
    jorneyr
        54
    jorneyr  
       2024-09-18 11:06:50 +08:00
    我们项目本来 JDk8 够用,后来使用了 Datagrip 的 MongoDB JDBC 驱动,这个驱动最低要求 JDK 17 ,所以升级到了 JDK 17 。

    最期待的是等 SpringBoot 支持虚拟线程完善后再一次性升级到最新版。
    chenfang
        55
    chenfang  
       2024-09-18 11:13:34 +08:00
    @yty2012g #28 问下大佬 ,因为我们业务比较倾向于低延迟,于是测试 ZGC,有时候会 full gc..然后延迟情况很夸张, 增大了内存或者调了一下 ZGC 的相关参数 还是会出现这种情况,

    而且 ZGC 貌似吞吐量对比 G1 会降低不少,很好奇你们没有 full gc 出现么?
    yty2012g
        56
    yty2012g  
       2024-09-18 11:18:55 +08:00
    @chenfang ZGC 吞吐量是会下降不少,分代 ZGC 能稍微好点,但是还是比 G1 要差一点。full GC 的问题更大可能性的还是内存泄露的问题吧,既然使用了高版本 JDK ,那就开个 JFR 呗,然后看看到底是哪里的对象没有被回收掉。我这边的服务类似于数据采集,虽然 QPS 高,但是基本都是朝生夕死,基本没有长期存活的对象,所以目前没观察到 full GC 。
    javaisthebest
        57
    javaisthebest  
       2024-09-18 11:26:46 +08:00   2
    刷版本号这个臭毛病到底是从哪个语言开始的?

    jdk8 jdk11 jdk21

    搞这三个大版本就差不多得了

    后续的更新全特么那种逗你玩的更新
    beginor
        58
    beginor  
       2024-09-18 11:28:46 +08:00
    有没有 jdk6 继续苟活的?
    Rickkkkkkk
        59
    Rickkkkkkk  
       2024-09-18 11:29:28 +08:00
    新版本的 java 一个大改进是 gc 时间,其实这一点就应该推动很多人去升级了
    Rever4433
        60
    Rever4433  
       2024-09-18 11:30:53 +08:00
    @wxw752 #45 现在银行 toB 虽然对技术要求不多,但是会定期进行漏洞扫描,倒逼我们的技术进行升级。我们已经被迫升级到了 JDK21 。
    ikas
        61
    ikas  
       2024-09-18 11:33:30 +08:00
    唯一可惜,字符串模板没了
    Mark24
        62
    Mark24  
       2024-09-18 11:41:57 +08:00   1
    JDK 的大版本是 向后兼容么? JDK23 可以兼容 JDK8 ?
    msg7086
        63
    msg7086  
       2024-09-18 11:46:36 +08:00
    @javaisthebest 换成 1.8 1.11 1.21 会让你舒服很多吗……
    msg7086
        64
    msg7086  
       2024-09-18 11:47:47 +08:00   1
    @Mark24 不完全兼容,我们代码库从 8 升到 17 已经搞了好几个月了,最明显的问题是大量基于 powermock 的测试代码需要重写。
    felixcode
        65
    felixcode  
       2024-09-18 11:49:11 +08:00 via Android
    jdk8 加 CentOS7 可以混到延迟退休,谁有意见那就是别的都不稳定,都不是企业级环境
    harry90
        66
    harry90  
       2024-09-18 11:53:38 +08:00
    说实话虽然领导想升级 jdk17 但是我不怎么赞成 做了快 10 年的 toB 系统 这玩意动起来吃力不讨好
    devswork
        67
    devswork  
       2024-09-18 12:01:02 +08:00
    完了,目前正在用 21 ,还使用了 STR 字符串模板,然后 23 好像没有了字符串模板了,怎么办
    jorneyr
        68
    jorneyr  
       2024-09-18 12:04:44 +08:00
    @devswork 目前正在用 21 ,还使用了 STR 字符串模板,然后 23 好像没有了字符串模板了,怎么办。

    这么坑么!
    zhouhu
        69
    zhouhu  
       2024-09-18 12:24:25 +08:00
    @jorneyr 本来就不是正式功能吧
    Ayanokouji
        70
    Ayanokouji  
    OP
       2024-09-18 12:42:35 +08:00
    @L0L #16 Stream Gatherers 大概率 JDK24 正式发布。
    https://openjdk.org/jeps/485
    hetal
        71
    hetal  
       2024-09-18 13:24:44 +08:00
    我们 mysql 都在用 8.4.2 了,J8 的同学还在用 5.7 么~
    dragondove
        72
    dragondove  
       2024-09-18 13:26:22 +08:00
    @jorneyr preview 特性,本来就没保证一定是这样的
    dasbn
        73
    dasbn  
       2024-09-18 13:31:32 +08:00
    等待 JDK 25 LTS
    yazinnnn0
        74
    yazinnnn0  
       2024-09-18 13:38:26 +08:00   1
    @javaisthebest
    不知道是不是从 rust 开始的


    另外, rust 之所以号称编程语言界的原神, 有没有更新频率一致的因素
    yazinnnn0
        75
    yazinnnn0  
       2024-09-18 13:42:12 +08:00
    我记得当初 kotlin 用户(还是官方来着?)说 kotlin 1.3 版本语言特性相当于 java 20, 不知道 java 23 的易用性比得上 kotlin1.3 了没
    ShotaconXD
        76
    ShotaconXD  
       2024-09-18 13:45:45 +08:00
    还在用 17, 说实话除了语法糖之外, 好像没感觉到太明显的变化. 也可能是市场上大多数的使用场景其实..... you know
    WindProtect
        77
    WindProtect  
       2024-09-18 13:45:49 +08:00
    非 lts 没啥好讨论的感觉。
    leegradyllljjjj
        78
    leegradyllljjjj  
       2024-09-18 13:50:35 +08:00 via iPhone
    八爷是你们能讨论的吗?别给八阿哥脸上抹黑
    zhouhu
        79
    zhouhu  
       2024-09-18 13:59:57 +08:00
    @ShotaconXD GC 方面有很多的优化,不要只是关注语法。
    iv8d
        80
    iv8d  
       2024-09-18 14:12:29 +08:00
    jdk8 永远的神,从桌面到安卓再到后台服务,一个版本就够了
    RainCats
        81
    RainCats  
       2024-09-18 14:23:59 +08:00
    @Mogugugugu ToG 的除非有人搞了 java8 几个大的 bug ,然后才会让升级版本,不然别想了
    RyanPoy
        82
    RyanPoy  
       2024-09-18 14:56:04 +08:00
    @javaisthebest 从.net 开始。不是到什么时候出来一个 5.0 。然后 java 就由 1.4 直接到了 5.0 ,然后就直接开始了。
    yazinnnn0
        83
    yazinnnn0  
       2024-09-18 15:03:15 +08:00
    @WindProtect
    474: ZGC: Generational Mode by Default
    467: Markdown Documentation Comments

    已经稳定的特性可以讨论一下, 貌似只有一个分代 zgc 和 md 注释

    Vector API (Eighth Incubator)
    这玩意儿咋辣么难产, 都第八次孵化了
    Leviathann
        84
    Leviathann  
       2024-09-18 15:09:17 +08:00
    @yazinnnn0 听说在值类型做好之前会一直处于孵化状态
    iintothewind
        85
    iintothewind  
       2024-09-18 16:02:58 +08:00
    把 Scala 的 pattern-match ,control flow ,case class 直接抄过来,==代替 equals ,默认不可变集合类型,变量声明默认 final ,

    直接全搬过来就好了,这样一点一点的抄,太慢了。
    GameAuto
        86
    GameAuto  
       2024-09-18 16:16:40 +08:00
    多年后端程序员,并没有持续关注 javasdk 版本的习惯,因为我用了三年多 kt 了,前几个项目一直在用 kt1.5 ,目前新项目也准备用 kt2.x 了
    asd999cxcx
        87
    asd999cxcx  
       2024-09-18 17:43:06 +08:00
    21 之后的下一个 LTS 是啥?
    Ayanokouji
        88
    Ayanokouji  
    OP
       2024-09-18 17:47:11 +08:00
    @asd999cxcx 25, 两年一个 lts
    yohole
        89
    yohole  
       2024-09-18 17:49:59 +08:00
    将来要升 JDK 的唯一动力可能是 Spring 的生态最低要求,例如 SpringBoot ,Spring 等几个大框架最新版本最低要求都至少 11 以上了
    Ayanokouji
        90
    Ayanokouji  
    OP
       2024-09-18 17:56:48 +08:00
    @yohole SpringBoot3 要求 jdk 最低 17 ,另外 spring boot2 去年已经结束社区维护了
    iamppz
        91
    iamppz  
       2024-09-18 17:59:54 +08:00 via iPhone
    刚降回去,升级太麻烦了,很多依赖不支持,字符串模版、文本块都还是预览特性,还是直接 kotlin 混合使用丝滑
    yohole
        92
    yohole  
       2024-09-18 18:03:32 +08:00
    @Ayanokouji #90 嗯差不多,单纯升级 JDK 的动力不多,但是升级 Spring 生态的动力相对高点,但是升级 JDK 这个在大中小企业是需要衡量收益和风险的,甚至还要考虑迁移成本,还涉及到运维、部署等等,所以目前主力还是 8
    cyningxu
        93
    cyningxu  
       2024-09-18 19:46:56 +08:00 via Android
    你发任你发,我用 java8
    yty2012g
        94
    yty2012g  
       2024-09-18 20:11:47 +08:00
    今天下载了 Orcale OpenJDK 23 ,压测了一下。G1 GC 的吞吐量还是比 ZGC 强不少,倒是 Vert.x + Virtual Thread 效果还是挺不错的
    xueyuehua
        95
    xueyuehua  
       2024-09-18 20:20:40 +08:00
    虽然我们现在项目也是都用 17 ,但是 17 有什么新特性,就没人用过,jdk8 那些用的都不多,能跑就行
    zhouhu
        96
    zhouhu  
       2024-09-18 20:24:22 +08:00
    kenvix
        97
    kenvix  
       2024-09-18 20:36:26 +08:00
    Vector 和 Vanilla 到底啥时候能实装的
    forgottencoast
        98
    forgottencoast  
       2024-09-18 21:31:41 +08:00
    @RyanPoy
    J2SE 5.0 September 30, 2004
    .Net 5.0 November 10, 2020
    BBCCBB
        99
    BBCCBB  
       2024-09-18 21:49:53 +08:00
    stream tolist 什么的, 什么时候能加入推断集合大小.. 每次直接 new arraylist(), 默认 capacity 10, 我 3 个元素他也是 10 个, 几百个元素也是 10 个, 去 stream map tolist 要扩容好几次.. 更多的元素更惨.. 扩容+额外的空间浪费.

    rust 对于明确大小, 没有 filter 之类修改的, 都会直接用明确大小..
    RoccoShi
        100
    RoccoShi  
       2024-09-18 22:09:00 +08:00
    jdk8 升级到 jdk17 已经忙活一年多了..
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     901 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 22:03 PVG 06:03 LAX 15:03 JFK 18:03
    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