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

Java 又将进化

  •  
  •   bringyou · 275 天前 · 5213 次点击
    这是一个创建于 275 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    jdk17 运行不了 java8 的字节码?
    dragondove
        28
    dragondove  
       274 天前
    @nothingistrue jdk 本身就不向下兼容,jdk 的兼容性只是二进制兼容,即 jdk8 编译出来的.class 文件可以在 jdk17 的 jvm 上运行
    bringyou
        29
    bringyou  
    OP
       274 天前
    @acctv2 原文是 value class ,我直译了一下~
    dragondove
        30
    dragondove  
       274 天前
    @zrc 部分设计模式的出现是因为语言本身的表达能力不够,很多用函数式写代码的人几乎不考虑设计模式。(可以看一下 github 上的一个项目 https://github.com/niltok/magic-in-ten-mins java 写的函数式编程)。jvm 如果足够强大,可以在运行期间检测运行状况并调整自身的设置(例如根据当前运行环境的内存和对象大小自动调整 gc 触发的时间)那么也不需要调优。目前 ZGC 是宣称最大 gc 时间不超过 1ms 的。
    bringyou
        31
    bringyou  
    OP
       274 天前
    @lysS 只找到 17 跟 11 的对比
    bringyou
        32
    bringyou  
    OP
       274 天前
    bringyou
        33
    bringyou  
    OP
       274 天前
    @nothingistrue Java8 还是有很多改进的吧,语法上的 lambda 、stream ,重新设计的日期 API ( localdatetime 这套),内存区的改动(去除永久代)。另外 LTS 比如 11 和 17 ,都是有 5 年的 active support 和 8 年的 security support: https://endoflife.date/java
    nothingistrue
        34
    nothingistrue  
       274 天前
    @dragondove #28 jdk 8 及之前,除了 enum 改保留字那一次,你还能找出哪个是低版本写的代码不能在高版本编译的吗。没有向下兼容性,jdk8 接口的 default 方法这一特性可能就不会出。
    dragondove
        35
    dragondove  
       274 天前
    @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  
       274 天前
    @Suddoo 为什么要说设计模式是过时的东西
    aguesuka
        37
    aguesuka  
       274 天前
    @xujia1998 暴论: 因为设计模式最重要的是 B 格, 但是现在它位于鄙视链下游.

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