Java 又将进化

2022-06-27 20:04:10 +08:00
 bringyou

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

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

5814 次点击
所在节点    Java
38 条回复
acctv2
2022-06-27 23:01:09 +08:00
“为 Java 引入值类型”,这......
fox0001
2022-06-27 23:07:10 +08:00
我们新项目用上了 OpenJDK 17 ,引发了一阵痛。感觉新技术还是赶紧用上,突然用上的话,思维跟不上
pursuer
2022-06-27 23:17:10 +08:00
C#有很多超前的设计,但也没能在市场上取得大优势。
所以掌握 python 和 c++就够了,其他语言大致了解下,要用的时候就直接拿胶水糊上就行,又不是不能用。。。
lysS
2022-06-27 23:37:16 +08:00
话说,有 1.8 和最新版的 benchmark 吗?
zrc
2022-06-28 09:03:26 +08:00
杠一下,难道设计模式、JVM 调优。。这些过时了?
nothingistrue
2022-06-28 09:35:19 +08:00
Java 8 并不是因为有啥优点才经典,而是因为它是目前唯一的稳定版本,在 Java 回到传统发布模式(一个大版本能顶上至少 5 年)之前,Java 8 很难被替代。Java 8 之后放弃了向下兼容性,别说大版本升级,小版本升级都可能蛋疼,而就算是 LTS 只有短短不到 3 年的维护器,这敢升级的都是勇士。
yazinnnn
2022-06-28 10:02:00 +08:00
放弃向下兼容是什么鬼?

jdk17 运行不了 java8 的字节码?
dragondove
2022-06-28 11:15:41 +08:00
@nothingistrue jdk 本身就不向下兼容,jdk 的兼容性只是二进制兼容,即 jdk8 编译出来的.class 文件可以在 jdk17 的 jvm 上运行
bringyou
2022-06-28 11:16:33 +08:00
@acctv2 原文是 value class ,我直译了一下~
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
2022-06-28 11:22:14 +08:00
@lysS 只找到 17 跟 11 的对比
bringyou
2022-06-28 11:22:38 +08:00
bringyou
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
2022-06-28 11:43:01 +08:00
@dragondove #28 jdk 8 及之前,除了 enum 改保留字那一次,你还能找出哪个是低版本写的代码不能在高版本编译的吗。没有向下兼容性,jdk8 接口的 default 方法这一特性可能就不会出。
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
2022-06-28 12:17:04 +08:00
@Suddoo 为什么要说设计模式是过时的东西
aguesuka
2022-06-28 14:14:03 +08:00
@xujia1998 暴论: 因为设计模式最重要的是 B 格, 但是现在它位于鄙视链下游.

单例, 建造者, 装饰器, 代理, 原型, 访问者, 迭代器... : 2022 年了 Java 还没有第一公民函数, 默认参数, 装饰器, 委托, 模式匹配, 代数数据类型...吗?
观察者: Observer 接口都被 Java 弃用了, 现在叫做 reactive.
组合实体: 问就是 OOP 已死 ECS 当立.
过滤器, 空对象: 这不就是个 Monad 吗, 单子说白了不过就是自函子范畴上的一个幺半群而已, 2022 年了书里不带点范畴也好意思误导别人.
mmdsun
2022-06-28 15:38:36 +08:00
@MakHoCheung 下载个 lombok 就能用扩展函数了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862548

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX