上一篇:Java 15 正式公布,14 个新个性
JDK 16 正式公布
牛逼啊,JDK 15 刚公布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上。
来看下 Oracle Java 反对路线图:
Oracle 持续放弃版本半年一发的节奏。。。
试问:你还能追上 JDK 的公布速度吗??
能够看到,JDK 16 也不是一个长期反对的版本,只反对 6 个月到 2021 年 9 月,上一个长期反对版本还是 JDK 11,下一个长期反对版本是 JDK 17,还有半年也要公布了。
所以千万不要把 JDK 16(非长期反对版本)用于生产,大家理解一下就好。
JDK 16 新个性一览
ID | JEP | Feature |
---|---|---|
1 | 394 | Pattern Matching for instanceof |
2 | 395 | Records |
3 | 392 | Packaging Tool |
4 | 387 | Elastic Metaspace |
5 | 376 | ZGC: Concurrent Thread-Stack Processing |
6 | 380 | UNIX-Domain Socket Channels |
7 | 396 | Strongly Encapsulate JDK Internals by Default |
8 | 390 | Warnings for Value-Based Classes |
9 | 338 | Vector API (Incubator) |
10 | 389 | Foreign Linker API (Incubator) |
11 | 393 | Foreign-Memory Access API (Third Incubator) |
12 | 397 | Sealed Classes (Second Preview) |
13 | 347 | Enable C++14 Language Features (in the JDK source code) |
14 | 357 | Migrate from Mercurial to Git |
15 | 369 | Migrate to GitHub |
16 | 386 | Alpine Linux Port |
17 | 388 | Windows/Aarch64 Port |
JDK 16 这个版本提供了 17 个加强性能,包含全新的 Java 语言改良,工具和内存治理,以及还有一些孵化和预览个性,有了这些新性能,Java 会进一步提高开发人员的生产力。
值得关注的变动是,JDK 14 中提供的预览个性:模式匹配和记录(Records),通过一年的社区反馈和理论利用,终于在 JDK 16 中实现最终落地了。
另外,Oracle 还为 Java SE 订阅服务中收费提供 GraalVM 企业版服务,GraalVM 能够帮忙进步应用程序的性能并缩小资源耗费,尤其是在微服务和云原生架构中。
JDK 16 新个性具体介绍
上面是 JDK 16 中的 17 个新个性具体介绍。
394:Pattern Matching for instanceof
模式匹配 for instanceof,相当于是加强的 instanceof,在 JDK 14 中首次成为预览个性,在 JDK 16 中正式转正。
模式匹配的到来将使得 instanceof 变得更简洁、更平安,为什么这么说,请看上面的示例。
失常的 instanceof 写法:
if (object instanceof Kid) {Kid kid = (Kid) object;
// ...
} else if (object instanceof Kiddle) {Kid kid = (Kid) object;
// ...
}
模式匹配的 instanceof 写法:
if (object instanceof Kid kid) {// ...} else if (object instanceof Kiddle kiddle) {// ...}
判断、赋值一步到位,是不是很牛逼?具体这里就不具体介绍了,栈长之前有写过一篇文章,点击这个链接进行浏览,或者关注公众号 Java 技术栈,回复 “java ” 进行浏览。
395:Records
简略来说,Records 就是一种新的语法糖,目标还是为了简化代码,在 JDK 14 中首次成为预览个性,在 JDK 16 中正式转正。
Records 能够在肯定水平上防止低级冗余的代码,比方:constructors, getters, equals(), hashCode(), toString() 办法等,相当于 Lombok 的 @Data
注解,但又不能齐全代替。
上面来看一个示例:
public record Student(String name, int id, int age) {}
没错,一行搞定(public 都能够省略),就是这么简略粗犷!!!
咱们再通过 IDEA 反编译 class 类的形式来看下它到底做了什么:
看完是不是有点 Lombok 的感觉?具体这里就不具体介绍了,栈长之前有写过一篇文章,点击这个链接进行浏览,或者关注公众号 Java 技术栈,回复 “java ” 进行浏览。
392:Packaging Tool
提供了 jpackage 打包工具,可用于打包独立的 Java 应用程序。
jpackage 打包工具是在 JDK 14 中首次作为孵化工具引入的新个性,到了 JDK 15 它依然还在孵化中,当初它终于转正了。
387:Elastic Metaspace
弹性的元空间,能够帮忙 HotSpot 虚拟机,将元空间中未应用的 class 元数据内存更及时地返回给操作系统,以缩小元空间的内存占用空间。
另外,还简化了元空间的代码,以升高保护老本。
376:ZGC: Concurrent Thread-Stack Processing
ZGC 是一种较新的垃圾回收器,指在解决 HotSpot 虚拟机中的 GC 进展及可伸缩问题。
ZGC 最早是在 JDK 11 中集成进来的,在 JDK 15 中正式转正。
这个版本则是为了让 ZGC 反对并发栈解决,解决了最初一个重大瓶颈,把 ZGC 中的线程栈解决从平安点移到了并发阶段。并且还提供了一种机制,使得其余 HotSpot 子系统能够通过该机制提早解决线程栈。
380:UNIX-Domain Socket Channels
UNIX 域套接字通道,为 java.nio.channels 包中的套接字通道和服务端套接字通道 APIs 减少 Unix 域套接字通道所有个性反对。
UNIX 域套接字次要用于同一主机上的过程间通信(IPC),大部分方面与 TCP/IP 套接字相似,不同的是 UNIX 域套接字是通过文件系统路径名寻址,而不是通过 IP 地址和端口号。
396:Strongly Encapsulate JDK Internals by Default
JDK 外部默认强封装,JDK 16 开始对 JDK 外部大部分元素默认进行强封装,sun.misc.Unsafe 之类的要害外部 API 除外,从而限度对它们的拜访。
此外,用户依然能够抉择自 JDK 9 以来的默认的宽松的强封装,这样能够帮忙用户毫不费力地降级到将来的 Java 版本。
390:Warnings for Value-Based Classes
基于值的类的正告,将根底类型包装类指定为基于值的类,破除其构造函数以进行删除,从而提醒新的弃用正告。并且提供了在任何基于值的类的实例上不失常进行同步的正告。
这个是对根本数据类型的包装类动刀了,只是提供正告,也不必太在意。
338:Vector API (Incubator)
初步看,还认为是汇合中的 Vector,原来不是!
Vector API 这是一个新的初始迭代孵化器模块,模块包:jdk.incubator.vector,用于示意在运行时牢靠地编译到反对的 CPU 架构上的最佳矢量硬件指令的矢量计算。
很高端,搞不懂,后续有工夫再钻研。
389:Foreign Linker API (Incubator)
引入了一个新的 API,该 API 提供了对本地 native 代码的动态类型拜访反对。
393:Foreign-Memory Access API (Third Incubator)
内部内存拜访 API(三次孵化中),引入了一个新的 API,能够帮忙 Java 应用程序更平安、无效地拜访 Java 堆之外的内部内存。
这个最早在 JDK 14 中成为孵化个性,JDK 15/ JDK 16 中持续二、三次孵化并对其 API 有了一些更新,这个能够在 JDK 17 中好好期待一下转正。
397:Sealed Classes (Second Preview)
关闭类(二次预览),能够是关闭类和或者关闭接口,用来加强 Java 编程语言,避免其余类或接口扩大或实现它们。
来看上面这个示例:
public abstract sealed class Student
permits ZhangSan, LiSi, ZhaoLiu {...}
类 Student 被 sealed
润饰,阐明它是一个关闭类,并且只容许指定的 3 个子类继承。
这个牛逼啊,有了这个个性,意味着当前不是你想继承就继承,想实现就实现了,你得通过容许才行,这个也能够在 JDK 17 中好好期待一下转正。
347:Enable C++14 Language Features (in the JDK source code)
容许在 JDK 底层的 C ++ 源代码中应用 C ++ 14 的新语言个性,并且提供了在 HotSpot 虚拟机代码中,哪些代码应用了这些新个性的指南。
357:Migrate from Mercurial to Git
将 OpenJDK 社区的源代码存储库从 Mercurial(hg)迁徙到 Git。
369:Migrate to GitHub
在 GitHub 上托管 OpenJDK 社区的 Git 存储库。
386:Alpine Linux Port
在 x64 和 AArch64 平台体系结构上,将 JDK 移植到 Alpine Linux 以及应用 musl 作为其次要 C 语言库的其余 Linux 发行版中。
388:Windows/Aarch64 Port
将 JDK 移植到 Windows/ AArch64 平台系列。
总结
当初的 JDK 真变成了“版本帝”,有力吐槽啊,版本发到了 16,大部分人却都还在用着 JDK 7/8,甚至 6。不过没关系,多理解一下,多把握一点新货色,对你来说没有害处。
尽管更新很快,但话又说回来,更是因为 Java 这种一直的更新、优化和翻新,才使得 Java 放弃着源源生机,Java 依然是当初最胜利、最支流的开发语言之一。
如果说 Java 第二,谁敢称第一呢?如果你说 PHP,那我 Respect!
最初,本文次要介绍了 JDK/Java 16 的 17 个新个性基本面,前面栈长有工夫也会持续更新一些 JDK 新个性具体教程,关注公众号 Java 技术栈第一工夫推送哦。如果你想看历史 Java 8+ 系列新个性教程,也能够在公众号菜单中进行浏览。
往期 Java 教程及示例源码:
https://github.com/javastacks…
OracleJDK 16 公布地址:
https://www.oracle.com/java/t…
OpenJDK 16 公布地址:
https://openjdk.java.net/proj…
Oracle JDK 16 下载地址:
https://www.oracle.com/java/t…
OpenJDK 16 下载地址:
https://jdk.java.net/16/
有趣味的能够下载尝鲜了!!
OracleJDK 和 OpenJDK 两者的区别这里不撰述了,不分明的请点击这里进行查看。
写了大半天,头发又在掉了。。。
老铁们,点个在看、转发反对下哦,也欢送分享给你的更多敌人们~
关注 Java 技术栈,继续分享最新、最支流的 Java 技术~
版权申明:本文系公众号 “Java 技术栈 ” 原创,原创实属不易,转载、援用本文内容请注明出处,禁止剽窃、洗稿,请自重,尊重别人劳动成果和知识产权。
近期热文举荐:
1.600+ 道 Java 面试题及答案整顿 (2021 最新版)
2. 终于靠开源我的项目弄到 IntelliJ IDEA 激活码了,真香!
3. 阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!
4.Spring Cloud 2020.0.0 正式公布,全新颠覆性版本!
5.《Java 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!