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

Java 又将进化

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

    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 吗?
    y830CAa5nink4rUQ
        3
    y830CAa5nink4rUQ  
       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
    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     Solana     3606 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 05:07 PVG 13:07 LAX 21:07 JFK 00:07
    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