java 目前的发展
引言
作为一个 java 开发者自然是对 java 语言发展很关心的,虽然工作万年 jdk 8,但是新版本的 jdk 用到生产环境应该也不会远了。
jdk
从 2017 年开始,JDK 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证新特性,推动 Java 的发展。所以 jdk 的版本号也是飞速的开始上涨,看着有要跟上 chrome 114.0.5735.110 版本号 的节奏
因为 jdk 版本号刷的太快了,就主要介绍 lts 版本
中间主要更新重点是这些项目
Loom,Valhalla,Amber,Panama
amber ,直译是琥珀,旨在提升 Java 的语言表现力,其中 var 关键字、text block 、record class 、sealed class 和模式匹配等,就是这个项目的产品,它们大多都以上线(released)。
loom ,直译是织布机,为 Java 引入虚拟线程(与协程进行区分),有点类似 goroutine ,完全由 JVM 管理和调度的用户态轻量级线程,完全与现有的 thread api 兼容。
panama ,取巴拿马运河沟通大西洋和太平洋之意,旨在提升 Java 调用外部语言 /接口等的能力,Java16 的向量化 API 源自于此。
valhalla ,直译是北欧神话中的英灵殿,为 Java 引入值类型和用户定义的基本量类型。
jdk 11
本地变量类型推断
1 |
|
局部变量类型推断就是左边的类型直接使用 var 定义,而不用写具体的类型,编译器能根据右边的表达式自动推断类型。
字符串加强
1 |
|
集合加强
自 Java 9 开始,Jdk 里面为集合(List/ Set/ Map)都添加了 of 和 copyOf 方法,它们两个都用来创建不可变的集合.
1 |
|
Stream 加强
Stream 是 Java 8 中的新特性,Java 9 开始对 Stream 增加了以下 4 个新方法。
1 |
|
HTTP Client API
这是 Java 9 开始引入的一个处理 HTTP 请求的的孵化 HTTP Client API,该 API 支持同步和异步,而在 Java 11 中已经为正式可用状态,你可以在 java.net 包中找到这个 API。
限于篇幅,还有很多更新也比较重要,就不一一介绍了。
jdk 17
这个版本是想当重量级,因为 spring boot 3 最低支持版本就是 jdk 17,虽然刚开始很多人对 spring 如此激进的跨版本升级有很多疑问,但是我觉得是一件很好的事情,由 spring 牵头的话,国内万年 jdk 8 的场面应该是可以改变一些了。
以下是 jdk 17 相关新特性
- 306:Restore Always-Strict Floating-PointSemantics / 恢复始终严格的浮点语义
- 356:Enhanced Pseudo-Random Number Generators / 增强型伪随机数发生器
- 382:New macOS Rendering Pipeline / 新的 macOS 渲染管道
- 391:macOS/AArch64 Port / macOS/AArch64 平台支持
- 398:Deprecate the Applet API for Removal / 弃用即将删除的Applet API
- 403:Strongly Encapsulate JDK Internals / 强封装JDK的内部API
- 406:Pattern Matching for switch(Preview) / Switch模式匹配(预览)
- 407:Remove RMI Activation / 删除 RMI 激活机制
- 409:Sealed Classes / 密封类
- 410:Remove the Experimental AOT and JIT Compiler / 删除实验性 AOT 和 JIT 编译器
- 411:Deprecate the Security Manager For Removal / 弃用即将删除的安全管理器
- 412:Foreign Function & Memory API(Incubator) / 外部函数和内存 API(孵化器)
- 414:Vector API (Second Incubator) / 矢量 API(二次孵化)
- 415:Context-Specific Deserialization Filters / 特定于上下文的反序列化过滤器
总的来时更新不是特别多,但是开发体验上跟 jdk 8 比已经很舒服了。
而且新能上比 jdk 8 也是优秀许多的。
17版本默认 gc 回收器也更改为了 g1 垃圾回收器。
jdk 21
这个版本距离生产环境估计还是比较远的。
- JEP 429:作用域值(孵化器)
- JEP 434:外部函数和内存 API(第二次预览)
- JEP 436:虚拟线程(第二次预览)
- JEP 437:结构化并发(第二个孵化器)
- JEP 438: Vector API (第五个孵化器)
- JEP 432:记录模式(第二次预览)
- JEP 433:switch 模式匹配(第四次预览)
不过里面最值得关注的就是 java 版本的虚拟线程了。
框架
spring boot3
上面已经说过,spring boot 3一口气把 jdk 版本升到了 17,并且支持了 AOT,不过是基于 Graalvm 实现的。个人体验过了一些,只能说目前 AOT 只适用于个人项目玩玩,生产环境可能会损失很多性能,而且项目编译成 AOT 时,非常的慢。
quarkus
Quarkus是一个全栈Kubernetes原生Java框架,用于Java虚拟机(JVM)和原生编译,专门针对容器优化Java,使其成为无服务器、云和Kubernete环境的有效平台。
个人体验了一下,在国内的话生态什么的肯定还是不如 spring ,不过有竞争,也可以让 spring 继续改善。