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

JDK 14 发布了

  •  
  •   ZSeptember · 2020-03-18 09:59:44 +08:00 · 10382 次点击
    这是一个创建于 1711 天前的主题,其中的信息可能已经有所发展或是发生改变。

    http://jdk.java.net/14/release-notes

    Java 采取六个月发布一个版本以后,每次发布大家的关注少了很多了。。

    不理解为什么要发布 preview 的 feature,这种 feature 大家敢用吗。

    感觉需要一个 Babel,可以配置转换到特定版本,特定 Runtime 的 JDK,对,我说的就是 Kotlin。

    93 条回复    2020-10-20 17:36:23 +08:00
    chendy
        1
    chendy  
       2020-03-18 10:04:06 +08:00
    距离下一个 LTS 的 17 还有一年半时间
    感觉 loom 这种依然遥遥无期…
    yjxjn
        2
    yjxjn  
       2020-03-18 10:06:53 +08:00
    Java8 路过。。。现在学习 Java8 太合适了,资料多,而且企业大部分都是 8,甚至有些是 6
    TypeError
        3
    TypeError  
       2020-03-18 10:09:05 +08:00 via Android
    还是 kotlin 好
    hantsy
        4
    hantsy  
       2020-03-18 10:12:24 +08:00
    重新下载一遍 OpenJDK,发现和半个月前下载的文件一样。应该是早就准备好发布了,之前就奇怪,Java version 打印出来的日期是 3 月 17 号。

    AdoptOpenJDK 14 还没发布正式版本。

    Preview 这种方式挺好的,没正式发布之前,先得到用户反馈,不断改进。总之一下出来的标准好。

    切换 JDK,用 Maven 的 Tool Chain 就好了。

    Text Block,Record ( Kotlin Data Class Clone ),Pattern Marching (现在还不是很好用,功能不如 Scala 强大)现在 Java 14 都有了。Sealed Class 也在加入之中。这对提高开发效率还是不错的。
    wysnylc
        5
    wysnylc  
       2020-03-18 10:14:39 +08:00
    小步快跑可比瀑布模式好多了,发现有问题及时改正还来得及
    ZSeptember
        6
    ZSeptember  
    OP
       2020-03-18 10:18:54 +08:00
    @hantsy
    @wysnylc 问题是 preview 的 feature 万一后面的版本改了,甚至删了。。你的代码怎么办,就被锁定版本了。或者出个转换工具,类似 js 的 babel。。现在还是 kotlin 稳,把 JVM 作为 runtime,语言特性不跟特定版本绑定。不用担心后续兼容性。
    sagaxu
        7
    sagaxu  
       2020-03-18 10:19:13 +08:00 via Android
    半年一个版本谁敢用
    gz911122
        8
    gz911122  
       2020-03-18 10:20:02 +08:00
    @sagaxu 前端一个月一个版本也没见谁不敢用啊?
    Rwing
        9
    Rwing  
       2020-03-18 10:22:02 +08:00   ❤️ 1
    C# 欢迎各位
    ben1024
        11
    ben1024  
       2020-03-18 10:27:48 +08:00
    14 了?感觉 8 以后完全没有更新的可能了
    tulongtou
        12
    tulongtou  
       2020-03-18 10:28:36 +08:00 via iPhone
    @gz911122 前端很少设计业务逻辑,后端往往和业务逻辑数据库挂钩,想对比起来同样更新频度,后端风险更高
    hantsy
        13
    hantsy  
       2020-03-18 10:29:58 +08:00
    @sagaxu Spring 5.3 兼容 14 了。一些新语言特性也在支持中,看到有 Experiemental 项目尝试支持 Record (肯定要等 Record 稳定后才可能出现在 Spring 正式版本中)。
    keshawnvan
        14
    keshawnvan  
       2020-03-18 10:32:07 +08:00
    之前团队从 Java8 升级到 Java11 过,收益并不大,迁移成本还不小。后续升级应该会谨慎很多。。。
    gz911122
        15
    gz911122  
       2020-03-18 10:32:37 +08:00
    @tulongtou 并不觉得,
    我就是 java 后端,就是 java 领域持续已久的懒惰,连个 maven 依赖都不跟随升级,还指望升级 java 大版本..
    (又不是不能用

    真是养老最佳选择
    yiyi11
        16
    yiyi11  
       2020-03-18 10:33:09 +08:00 via Android
    好奇问下,jdk 历史上有 breaking change 吗?
    micean
        17
    micean  
       2020-03-18 10:37:43 +08:00
    NPE 改进挺重要的
    record 在 lombok 的加持下有些鸡肋……
    hantsy
        18
    hantsy  
       2020-03-18 10:38:09 +08:00
    @keshawnvan 8-11 不知道会有什么成本?难道你全部用 Module System ?
    收益方面嘛,11 后我用得多的几个语言特性:
    var,
    Collections 的 .of 静态工厂
    另外,Optional,Stream 等也在 8 后加入一些实用方法。
    zzzmh
        19
    zzzmh  
       2020-03-18 10:38:26 +08:00
    8 还能用一万年
    arthas2234
        20
    arthas2234  
       2020-03-18 10:38:52 +08:00
    现在还用 jdk8,之前从 jdk6 升级上来的,真香。。
    keshawnvan
        21
    keshawnvan  
       2020-03-18 10:42:35 +08:00
    @hantsy 我们之前的项目有兼容旧系统的一些接口,升级 11 之后 JavaEE 的东西都干掉了,兼容花了很长时间。11 在语法层面的提升比较小,用的比较多的就是 List.of()和 Map.of()。var 很少用,什么时候 Java 能出个 val。。。
    samondlee
        22
    samondlee  
       2020-03-18 10:42:56 +08:00
    很多在运营手游服务端后端还在用 jdk6
    Cbdy
        23
    Cbdy  
       2020-03-18 10:43:05 +08:00
    @yiyi11 都是一些 api 的增增减减,大的 break change 没有,java 很重视兼容性
    BBCCBB
        24
    BBCCBB  
       2020-03-18 10:44:07 +08:00
    @chendy 之前准备弄 2 套, 一套原来的现成, 一套可以无缝切换的协程, 现在又特么改了. 直接替换线程实现协程了貌似. 遥遥无期.
    rockyou12
        25
    rockyou12  
       2020-03-18 10:48:04 +08:00
    还好吧,14 那个 switch 真的很像 kotlin 的 when 了,这个语法比之前那些香多了,再也不用 if..if else..if else........
    luzemin
        26
    luzemin  
       2020-03-18 10:50:11 +08:00
    公司用的 8
    Tn5ohB1Yecdk3qCK
        27
    Tn5ohB1Yecdk3qCK  
       2020-03-18 10:51:54 +08:00
    等 jdk20 再说
    jinsongzhao
        28
    jinsongzhao  
       2020-03-18 10:51:57 +08:00
    头像很漂亮,哦哦,你说的是 JDK 14 呀
    yuexuan
        29
    yuexuan  
       2020-03-18 11:00:54 +08:00
    我们公司还在用 8 呀...
    zichen
        30
    zichen  
       2020-03-18 11:07:52 +08:00
    @sagaxu golang 发版也挺快的啊。
    pmispig
        31
    pmispig  
       2020-03-18 11:17:54 +08:00
    就算出了 JDK 10086,我还是坚持 1.8
    Greendays
        32
    Greendays  
       2020-03-18 11:18:29 +08:00
    这是面向 KPI 更新吗?
    richard1122
        33
    richard1122  
       2020-03-18 11:18:58 +08:00
    好多 kotlin 的特性 java 也有了。。
    MakHoCheung
        34
    MakHoCheung  
       2020-03-18 11:19:45 +08:00
    @chendy java20 应该就有了
    redford42
        35
    redford42  
       2020-03-18 11:20:08 +08:00
    8 很好,先这样吧
    nefuer
        36
    nefuer  
       2020-03-18 11:21:45 +08:00
    @jinsongzhao 看头像 哈哈哈
    MrBearin
        37
    MrBearin  
       2020-03-18 11:24:29 +08:00
    管他咋更新, 我脚的公司就会一直用 8.....
    liangzimo
        38
    liangzimo  
       2020-03-18 11:29:53 +08:00
    .net 5 preview 1 也出来了
    murmur
        39
    murmur  
       2020-03-18 11:31:53 +08:00
    坚持 java8 不动摇
    ice2neet
        40
    ice2neet  
       2020-03-18 11:38:45 +08:00
    loom 还没出 没啥质的改变 8 够用了
    xFrye
        41
    xFrye  
       2020-03-18 11:42:39 +08:00
    下次一定,我还是用 8
    specture
        42
    specture  
       2020-03-18 11:51:26 +08:00
    @keshawnvan 迁移的成本体现在哪些方面?
    FrankD
        43
    FrankD  
       2020-03-18 11:58:23 +08:00 via Android
    java8 对企业来说还是免费的,后面就要收费了,除非用的不是 oracle 家
    ZSeptember
        44
    ZSeptember  
    OP
       2020-03-18 12:19:39 +08:00
    现在来说,8 确实已经够用了,后面的更新都是不痛不痒的,大家都不怎么关注。
    估计下个大发布,就是 Loom 了。
    wangxiaoaer
        45
    wangxiaoaer  
       2020-03-18 12:23:59 +08:00 via Android
    @zichen 泛型支持了没?
    ZSeptember
        46
    ZSeptember  
    OP
       2020-03-18 12:24:48 +08:00
    @zichen 我的关注点是 preview 的 feature,没有一个兼容的机制,preview 的后来被删了就尴尬了,我觉得大家是不敢用的。Go 也是 6 个月一个版本,但是会兼容的; Java 以前也是兼容著称的,现在改成这种发布,真没觉得好。
    hantsy
        47
    hantsy  
       2020-03-18 12:37:14 +08:00
    @keshawnvan Java EE 部分主要是 JDBC,XML,Web Service 的为了写 Client 程序的一些 API,早就计划删除,这些只要重要加回依赖就好了。
    hantsy
        48
    hantsy  
       2020-03-18 12:39:26 +08:00
    @rockyou12 Switch Expression 经过三个版本的迭代现在 Stable 了。
    bk201
        49
    bk201  
       2020-03-18 12:41:19 +08:00
    升级的需求是啥?拼命更新,老系统都吃不消吧
    hantsy
        50
    hantsy  
       2020-03-18 12:43:06 +08:00
    实际从 8 后面,JVM 的变化非常大,GC 算法增删很大,这些不是做这些领域的工作,没怎么关心。
    hantsy
        51
    hantsy  
       2020-03-18 12:43:48 +08:00
    @ZSeptember Kotlin 的语言特性也是采用这种机预览机制添加的。
    GM
        52
    GM  
       2020-03-18 12:44:24 +08:00
    我就想问默认参数什么时候支持啊?复杂一点的类,本来一个构造函数就能搞定的事情,现在要要一二三四五,甚至六七八个构造函数,累不累啊?
    sorra
        53
    sorra  
       2020-03-18 12:45:17 +08:00
    @yiyi11 几乎每个大版本都有 breaking change,只不过可能大多数人用不到那个角落的功能
    hantsy
        54
    hantsy  
       2020-03-18 12:45:20 +08:00
    @FrankD 只针对订阅用户收费。Oracle 对开源贡献很大,是值得尊敬的公司。
    hantsy
        55
    hantsy  
       2020-03-18 12:48:48 +08:00
    @sorra 有些标准化, 比如 Base64 Encoder。

    很少量的删除了,一般都是有替代品。一个主要我看到就是清理以前 com.sun 里面的 API,这里面有很多写工具,操作 Class 文件可能用到的 API。除非大势已去的,比如 Applet,直接 Cut 掉了。
    hantsy
        56
    hantsy  
       2020-03-18 12:56:40 +08:00
    另外一个 Java 11 中 Stable 的特性是 HttpClient,我觉得算是一大特性,它基于新的 Java9 Flow API 和 8 的 Future API。

    试用过,感觉有点点怪怪的。写什么客户的时候不需要再用第三方 Http Client,如 Apache,OKHttp 等。

    处理一般的文件,InputStream,String 的数据都是可以的,JSON 可以借标准 JSONB,JSONP 等。
    cgpiao
        57
    cgpiao  
       2020-03-18 12:57:19 +08:00
    java14 出来后跟 kotlin 好像。
    hantsy
        58
    hantsy  
       2020-03-18 13:06:27 +08:00
    Kotlin 现在 Spring 是全盘接受,Kotlin 确是一等公民,所有特性都是急于添加 Kotlin DSL 支持。Kotlin DSL 语法是好是坏,我个人没太多感觉。

    虽然 Spring 以前也接受过 Groovy,Scala。Groovy 进入了 Spring 核心,坐了冷板凳。Scala 还未进入核心,直接放弃了。

    Kotlin 感觉强大的两个东西,extensions, reified,很多 Spring 的 Kotlin API 简化支持都是在 Reified 语法上做文章。
    sagaxu
        59
    sagaxu  
       2020-03-18 13:07:23 +08:00 via Android
    移除了 CMS 垃圾收集器,ZGC 也支持 Mac 和 Win 了
    lawrencexu
        60
    lawrencexu  
       2020-03-18 13:21:20 +08:00 via Android
    @yiyi11 之前 8 有个小版本引入了 keystore 相关的安全性增强,然后很多应用就挂了,需要 workaround 才能正常工作。7 升 8 的时候计算的 rounding 改过,8 升 11 的时候 locale 相关也改过。这只是我碰过的。
    hantsy
        61
    hantsy  
       2020-03-18 13:23:00 +08:00
    CMS 是不是已经删除了?
    jinsongzhao
        62
    jinsongzhao  
       2020-03-18 13:27:57 +08:00
    需要用到 Nashorn JavaScript 引擎,9 以后就 Deprecated 了。比较关心多个 jar 包运行时,是否真共享 jvm,节省内存了。
    hantsy
        63
    hantsy  
       2020-03-18 13:34:39 +08:00
    @jinsongzhao 已经删除了 JS Engine。
    Mithril
        64
    Mithril  
       2020-03-18 13:38:43 +08:00
    @hantsy Oracle 这公司已经算是业界毒瘤了吧,口碑比当年的微软还差。
    你仔细看看协议,Oracle 发布的 JDK 是每个版本只维护半年,半年后是没有免费更新的,哪怕 LTS 都是一样。你想用那就要么跟着半年更新一个大版本,要么就买服务。订阅服务是可以获取长期更新的。
    不然为什么大厂都发布自己的 build,就是因为原来用的好好 Oracle JDK 没法用了。
    coderEOS
        65
    coderEOS  
       2020-03-18 14:06:38 +08:00 via Android
    skip this version +10086
    keshawnvan
        66
    keshawnvan  
       2020-03-18 14:10:21 +08:00
    @hantsy 依赖没那么好加,很多给出的依赖都不好用。。依赖在运行时不兼容的问题也很多
    tairan2006
        67
    tairan2006  
       2020-03-18 14:17:13 +08:00
    要看 LTS 版本,这种普通版本无所谓了…跟 go 不一样,go 的随便升级的
    toms0301
        68
    toms0301  
       2020-03-18 14:23:08 +08:00
    还在使用 java1.6.
    zpf124
        69
    zpf124  
       2020-03-18 14:25:31 +08:00
    @FrankD 然而事实是只有截止 JDK8_u202 是使用的旧的协议, 之后的 JDK8 版本协议也换成最新的那版不支持免费商用的版本了。
    也就说说从 19 年 3 月之后在 oracle 官方下载的最新版本 jdk8 用于商用的话都是违反协议的。
    想免费商用那只能当 JDK8 也结束维护周期了,只能注册一个账号然后去它的 release 存档里找 u202 之前的版本。


    (不过我身边还是没有见到有谁提这茬事,还是依旧去下最新的 jdk8 继续用)
    Cbdy
        70
    Cbdy  
       2020-03-18 14:32:46 +08:00
    @jinsongzhao
    nashorn 可以转 graaljs,graaljs 提供了 nashorn 兼容模式,加两个 jar 依赖即可
    https://github.com/graalvm/graaljs/blob/master/docs/user/NashornMigrationGuide.md
    cwjokaka
        71
    cwjokaka  
       2020-03-18 14:34:33 +08:00
    java8 能战 10 年
    zpf124
        72
    zpf124  
       2020-03-18 14:36:17 +08:00
    @hantsy Oracle jdk 的新协议是对任何商用都收费,和订阅不订阅没关系。Oracle 官网提供的 jdk 和 openjdk 官网提供的 jdk 是两份东西,包含的私有技术和使用的协议都不同。openJdk 的协议才是用的原来的可免费商用的协议。

    Oracle 确实对开源贡献很大,一方面他们确实将自己的部分内部技术拿来提升了开源项目,另一方面他们也买黄了好几个开源项目。
    Adven
        73
    Adven  
       2020-03-18 14:50:03 +08:00
    Kubernates 每个季度都会发布一个版本,有许多 API 接口都是不稳定的 alpha 版,这个并不会影响用户实际使用,未到生产可用的 API 不使用就完了。
    Adven
        74
    Adven  
       2020-03-18 14:53:26 +08:00
    @chendy 前不久刚发布了第二个早期可用版本,Java 版的协程以后可能会叫”虚拟线程“了
    anjuyiyu
        75
    anjuyiyu  
       2020-03-18 14:54:43 +08:00
    14 看了遍新特性,
    npe 的调整还是可以,
    gc 相关的改动很多,
    cms gc 在 14 退役了,
    不过生产还是 Java 8。升级收益点不是很清晰
    ZSeptember
        76
    ZSeptember  
    OP
       2020-03-18 15:12:45 +08:00
    @hantsy kotlin,确实是的,但是 kotlin 是没有绑定 JVM 的,升级降级会简单一些。
    hantsy
        77
    hantsy  
       2020-03-18 15:28:22 +08:00
    t2doo
        78
    t2doo  
       2020-03-18 15:34:20 +08:00
    昨天头一回用那个 mybatis 写了个 select,run 的时候报错代码 5,噢,原来是要用 jdk8,真香
    fate
        79
    fate  
       2020-03-18 17:19:22 +08:00
    什么时候支持纤程
    IGJacklove
        80
    IGJacklove  
       2020-03-18 17:33:45 +08:00
    @wysnylc 谁敢用?。。。自己学着玩还差不多。
    daozhihun
        81
    daozhihun  
       2020-03-18 22:10:01 +08:00
    我觉得近几年更到 11 有希望,14 估计还要等个七八年吧
    q447643445
        82
    q447643445  
       2020-03-18 22:31:10 +08:00
    8 都没摸透. 11 就更没去看了😂
    jelipo
        83
    jelipo  
       2020-03-18 23:21:44 +08:00
    Kotlin 什么都好,就是那个异常不能强制抛出了,现在的业务异常严重依赖 Exception。
    Ziav
        84
    Ziav  
       2020-03-18 23:36:34 +08:00 via Android
    吓得我赶紧抱紧我的 Java 8
    0xljh
        85
    0xljh  
       2020-03-19 11:10:21 +08:00
    升级 jdk 版本对 kpi 没用,出锅了还要背锅
    CFO
        86
    CFO  
       2020-03-19 12:11:30 +08:00
    @0xljh +1 而且这种坑填起来很费劲
    xcstream
        87
    xcstream  
       2020-03-19 12:50:57 +08:00
    java 出到 100 了还是大多数用 8
    alya
        88
    alya  
       2020-03-20 14:57:49 +08:00
    我选 scala
    goodboy95
        89
    goodboy95  
       2020-04-01 20:08:27 +08:00
    @ben1024 更新个 var 也不错嘛,虽然在 idea 上我还是尽量避免用 var 的,不能像 vs code 一样把鼠标放上去自动显示实际类型。
    MotherShip
        90
    MotherShip  
       2020-04-01 21:48:45 +08:00
    不是 LTS 谁用啊。。
    Record 字段多没法写注释太 sb 了,被 lombok 吊着打
    JDK11 也没啥动力更新,说实在 lombok 的 var 和 val 已经够用了。。再说想吃语法糖不如 kotlin
    tldzyx
        91
    tldzyx  
       2020-07-03 14:46:11 +08:00
    我司定格在 jdk-8u181 这个版本了, 原因也很简单粗暴: CDH 官方认证, 然后集群统一 jdk 版本利于运维.

    https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_java_requirements.html#concept_hzw_zyl_rcb
    tldzyx
        92
    tldzyx  
       2020-07-03 14:49:47 +08:00
    https://docs.cloudera.com/documentation/enterprise/release-notes/topics/rn_consolidated_pcm.html#concept_ihg_vf4_j1b

    贴错了, 因为 CDH6 吃相不太好看, 恰好运维也不想升级折腾, 所以 CDH 5.16.x 是在用版本.
    wenjun19931112
        93
    wenjun19931112  
       2020-10-20 17:36:23 +08:00
    jdk14 可以到这里来下载 http://www.jdkdownload.com/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2739 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 09:45 · PVG 17:45 · LAX 01:45 · JFK 04:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.