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

Java 又将进化

  •  
  •   bringyou · 2022-06-27 20:04:10 +08:00 · 5763 次点击
    这是一个创建于 639 天前的主题,其中的信息可能已经有所发展或是发生改变。

    2018 年的时候,Mark Reinhold 在 Oracle Codeone 大会上做了一次演讲,主题是The Future of Java is Today,内容分别是当时启用的每 6 月一次的发布节奏、oracle 持续对 Java 的支持、当时 Java 发布的新特性,最后介绍了正在开发中的四个项目:amberloompanamavalhalla

    • amber ,直译是琥珀,旨在提升 Java 的语言表现力,其中 var 关键字、text block 、record class 、sealed class 和模式匹配等,就是这个项目的产品,它们大多都以上线(released)。
    • loom ,直译是织布机,为 Java 引入虚拟线程(与协程进行区分),有点类似 goroutine ,完全由 JVM 管理和调度的用户态轻量级线程,完全与现有的 thread api 兼容。
    • panama ,取巴拿马运河沟通大西洋和太平洋之意,旨在提升 Java 调用外部语言 /接口等的能力,Java16 的向量化 API 源自于此。
    • valhalla ,直译是北欧神话中的英灵殿,为 Java 引入值类型和用户定义的基本量类型。

    如今四年过去了,这四个项目或者开始公测(成为 draft 状态),或者成为预览版本(preview)将随短期 Java 版本发布,或者已经上线,最新进度见此。 也许在下个 LTS 版本,它们都会发布完成,相信到时候会是比肩 Java8 一样的经典版本。

    第 1 条附言  ·  2022-07-04 21:35:45 +08:00
    38 条回复    2022-06-28 15:38:36 +08:00
    ChaosesIb
        1
    ChaosesIb  
       2022-06-27 20:07:25 +08:00
    安卓都还在用 java11 吧
    dcty
        2
    dcty  
       2022-06-27 20:14:23 +08:00 via Android
    @ChaosesIb 不是 J ( ava ) 8 吗?
    DrX
        3
    DrX  
       2022-06-27 20:15:21 +08:00
    我们 JDK8 永不言弃!
    Dispnt
        4
    Dispnt  
       2022-06-27 20:17:50 +08:00 via Android
    它管它进化,我用 1.8
    wanacry
        5
    wanacry  
       2022-06-27 20:20:29 +08:00 via iPhone
    1.8 用到死
    cpstar
        6
    cpstar  
       2022-06-27 20:21:26 +08:00
    生活在 java1.8 的我表示,哇咔,名词真 NB ,最后一个都不知道怎么发音,然并卵,我的 1.8 就够用了——其实带上泛型都不是存粹的 OOL 。
    littlewing
        7
    littlewing  
       2022-06-27 20:22:26 +08:00   ❤️ 3
    和 C++ 搞军备竞赛呢
    Leviathann
        8
    Leviathann  
       2022-06-27 20:32:32 +08:00
    明年秋天肯定不够,loom 只能上初版,值类型、基本类型泛型不一定能上,大后年秋天的 Java25 差不多
    knightdf
        9
    knightdf  
       2022-06-27 20:32:42 +08:00   ❤️ 1
    新项目全部用 java 17 了,用新不用旧
    dcsuibian
        10
    dcsuibian  
       2022-06-27 20:54:03 +08:00
    历史的重演:[为什么很多 Java 程序员都不愿意升级到最新的 jdk ?]( https://www.zhihu.com/question/26844110)
    大家嘴上说“万年 Java8”,但迟早还是会升上去的。
    dcsuibian
        11
    dcsuibian  
       2022-06-27 20:56:59 +08:00
    只考虑 LTS 版,目前 17 还不到一年,但 11 已经很成熟了。
    以此推算,大概到 2025 就要学 17 了。
    MakHoCheung
        12
    MakHoCheung  
       2022-06-27 21:04:54 +08:00
    Kotlin 的優勢只剩尾随闭包和扩展函数了,哈哈哈
    Buges
        13
    Buges  
       2022-06-27 21:07:15 +08:00   ❤️ 1
    panama 这个名字取得不行,这是个敏感词。代码传 gitee 这些国内平台的时候,有可能因此造成麻烦踩坑。
    Suddoo
        14
    Suddoo  
       2022-06-27 21:21:06 +08:00 via iPhone   ❤️ 3
    Java 一直在进化,但是很多面试官的水平还停留在设计模式、JVM 调优……这些过时的东西上
    bsfmig
        15
    bsfmig  
       2022-06-27 21:21:14 +08:00
    kergee
        16
    kergee  
       2022-06-27 21:42:29 +08:00
    On Java 这本书也说只需要考虑 LTS 版本
    kkkiio
        17
    kkkiio  
       2022-06-27 22:26:51 +08:00
    重点都是 JVM 的进化,Kotlin 、Scala 等其他 JVM 语言都能享受
    keppelfei
        18
    keppelfei  
       2022-06-27 22:34:37 +08:00
    springboot2.x 到时候停止维护估计有一大批要用 jdk17 了
    jeesk
        19
    jeesk  
       2022-06-27 22:51:50 +08:00 via Android
    你发任你发 我还是 1.8
    jeesk
        20
    jeesk  
       2022-06-27 22:52:04 +08:00 via Android
    @keppelfei 😂😂
    acctv2
        21
    acctv2  
       2022-06-27 23:01:09 +08:00
    “为 Java 引入值类型”,这......
    fox0001
        22
    fox0001  
       2022-06-27 23:07:10 +08:00
    我们新项目用上了 OpenJDK 17 ,引发了一阵痛。感觉新技术还是赶紧用上,突然用上的话,思维跟不上
    pursuer
        23
    pursuer  
       2022-06-27 23:17:10 +08:00
    C#有很多超前的设计,但也没能在市场上取得大优势。
    所以掌握 python 和 c++就够了,其他语言大致了解下,要用的时候就直接拿胶水糊上就行,又不是不能用。。。
    lysS
        24
    lysS  
       2022-06-27 23:37:16 +08:00
    话说,有 1.8 和最新版的 benchmark 吗?
    zrc
        25
    zrc  
       2022-06-28 09:03:26 +08:00
    杠一下,难道设计模式、JVM 调优。。这些过时了?
    nothingistrue
        26
    nothingistrue  
       2022-06-28 09:35:19 +08:00
    Java 8 并不是因为有啥优点才经典,而是因为它是目前唯一的稳定版本,在 Java 回到传统发布模式(一个大版本能顶上至少 5 年)之前,Java 8 很难被替代。Java 8 之后放弃了向下兼容性,别说大版本升级,小版本升级都可能蛋疼,而就算是 LTS 只有短短不到 3 年的维护器,这敢升级的都是勇士。
    yazinnnn
        27
    yazinnnn  
       2022-06-28 10:02:00 +08:00
    放弃向下兼容是什么鬼?

    jdk17 运行不了 java8 的字节码?
    dragondove
        28
    dragondove  
       2022-06-28 11:15:41 +08:00
    @nothingistrue jdk 本身就不向下兼容,jdk 的兼容性只是二进制兼容,即 jdk8 编译出来的.class 文件可以在 jdk17 的 jvm 上运行
    bringyou
        29
    bringyou  
    OP
       2022-06-28 11:16:33 +08:00
    @acctv2 原文是 value class ,我直译了一下~
    dragondove
        30
    dragondove  
       2022-06-28 11:19:33 +08:00
    @zrc 部分设计模式的出现是因为语言本身的表达能力不够,很多用函数式写代码的人几乎不考虑设计模式。(可以看一下 github 上的一个项目 https://github.com/niltok/magic-in-ten-mins java 写的函数式编程)。jvm 如果足够强大,可以在运行期间检测运行状况并调整自身的设置(例如根据当前运行环境的内存和对象大小自动调整 gc 触发的时间)那么也不需要调优。目前 ZGC 是宣称最大 gc 时间不超过 1ms 的。
    bringyou
        31
    bringyou  
    OP
       2022-06-28 11:22:14 +08:00
    @lysS 只找到 17 跟 11 的对比
    bringyou
        32
    bringyou  
    OP
       2022-06-28 11:22:38 +08:00
    bringyou
        33
    bringyou  
    OP
       2022-06-28 11:30:03 +08:00
    @nothingistrue Java8 还是有很多改进的吧,语法上的 lambda 、stream ,重新设计的日期 API ( localdatetime 这套),内存区的改动(去除永久代)。另外 LTS 比如 11 和 17 ,都是有 5 年的 active support 和 8 年的 security support: https://endoflife.date/java
    nothingistrue
        34
    nothingistrue  
       2022-06-28 11:43:01 +08:00
    @dragondove #28 jdk 8 及之前,除了 enum 改保留字那一次,你还能找出哪个是低版本写的代码不能在高版本编译的吗。没有向下兼容性,jdk8 接口的 default 方法这一特性可能就不会出。
    dragondove
        35
    dragondove  
       2022-06-28 12:07:33 +08:00
    @nothingistrue 我的意思是官方文档只从来没说过 java 编译器能做到向后兼容,但是说过保证 vm 下运行二进制兼容。至于以前版本的不兼容性可以从 oracle 文档上找到,比如 https://www.oracle.com/java/technologies/javase/incompatibilities.html https://www.oracle.com/java/technologies/compatibility.html
    jdk9 最大的改动应该也就是模块化(实际上影响并不大,大部分在 jdk8 下写的代码能在 jdk9 上编译)但是 jdk16 加了模块安全性相关的功能,需要加额外启动参数。个人尝试过升级 jdk8 的项目到 jdk17 ,遇到的问题有:1.lombok 兼容问题,升级 lombok 就可以解决 2. javaEE 模块在 jdk11 时被移除,通过 maven 重新引入即可解决。3. sun 包被移除,但是能在 java.util 下几乎都能找到替代类。4. jdk16 引入的模块安全问题,加启动参数即可解决。
    xujia1998
        36
    xujia1998  
       2022-06-28 12:17:04 +08:00
    @Suddoo 为什么要说设计模式是过时的东西
    aguesuka
        37
    aguesuka  
       2022-06-28 14:14:03 +08:00
    @xujia1998 暴论: 因为设计模式最重要的是 B 格, 但是现在它位于鄙视链下游.

    单例, 建造者, 装饰器, 代理, 原型, 访问者, 迭代器... : 2022 年了 Java 还没有第一公民函数, 默认参数, 装饰器, 委托, 模式匹配, 代数数据类型...吗?
    观察者: Observer 接口都被 Java 弃用了, 现在叫做 reactive.
    组合实体: 问就是 OOP 已死 ECS 当立.
    过滤器, 空对象: 这不就是个 Monad 吗, 单子说白了不过就是自函子范畴上的一个幺半群而已, 2022 年了书里不带点范畴也好意思误导别人.
    mmdsun
        38
    mmdsun  
       2022-06-28 15:38:36 +08:00 via iPhone
    @MakHoCheung 下载个 lombok 就能用扩展函数了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3228 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 11:32 · PVG 19:32 · LAX 04:32 · JFK 07:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.