JDK 16 正式发布,一次性发布 17 个新特性,不服不行
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 写法:
|
模式匹配的 instanceof 写法:
|
判断、赋值一步到位,是不是很牛逼?具体这里就不详细介绍了,栈长之前有写过一篇文章,点击这个链接进行阅读,或者关注Java技术栈进行阅读。
395:Records
简单来说,Records 就是一种新的语法糖,目的还是为了简化代码,在 JDK 14 中首次成为预览特性,在 JDK 16 中正式转正。
Records 可以在一定程度上避免低级冗余的代码,比如:constructors, getters, equals(), hashCode(), toString() 方法等,相当于 Lombok 的 @Data 注解,但又不能完全替代。
下面来看一个示例:
|
没错,一行搞定(public 都可以省略),就是这么简单粗暴!!!
我们再通过 IDEA 反编译 class 类的方式来看下它到底做了什么:
看完是不是有点 Lombok 的感觉?具体这里就不详细介绍了,栈长之前有写过一篇文章,点击这个链接进行阅读,或者关注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 编程语言,防止其他类或接口扩展或实现它们。
来看下面这个示例:
|
类 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/javastack
OracleJDK 16 发布地址:
https://www.oracle.com/java/technologies/javase/16-relnotes.html
OpenJDK 16 发布地址:
https://openjdk.java.net/projects/jdk/16/
Oracle JDK 16 下载地址:
https://www.oracle.com/java/technologies/javase-downloads.html
OpenJDK 16 下载地址:
https://jdk.java.net/16/
有兴趣的可以下载尝鲜了!!
OracleJDK 和 OpenJDK 两者的区别这里不撰述了,不清楚的请点击这里进行查看。
写了大半天,头发又在掉了。。。
老铁们,点个在看、转发支持下哦,也欢迎分享给你的更多朋友们~
关注Java技术栈,持续分享最新、最主流的Java技术~
版权申明:本文系 “Java技术栈” 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重他人劳动成果和知识产权。
JDK 16 正式发布,一次性发布 17 个新特性,不服不行相关推荐
- oracle jdk1.7 内存,JDK 16 正式发布,一次性发布 17 个新特性…不服不行!
上一篇:Java 15 正式发布, 14 个新特性 JDK 16 正式发布 牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上. ...
- JAVA17版本,JDK 16 正式发布,一次性发布 17 个新特性…不服不行!
JDK 16 正式发布 牛逼啊,JDK 15 刚发布半年(2020/09/15),JDK 16 又如期而至(2021/03/16),老铁们,跟上. 来看下 Oracle Java 支持路线图: Ora ...
- Java基础学习总结(176)——JDK 16 正式发布,一次性发布 17 个新特性
JDK 16 正式发布 JDK 16 不是一个长期支持的版本,只支持 6 个月到 2021 年 9 月,上一个长期支持版本还是 JDK 11,下一个长期支持版本是 JDK 17,还有半年也要发布了.所 ...
- JDK 16 正式发布!程序员:追不上了...
点击"开发者技术前线",选择"星标????" 让一部分开发者看到未来 地址:https://blog.csdn.net/csdnnews/article/det ...
- 如约而至,Java 10 正式发布:包含 109 项新特性
如约而至,Java 10 正式发布:包含 109 项新特性 期待已久,没有跳票的 Java 10 已正式发布!你可以通过这里下载 Java 10 正式版. 此前我们曾报道过,为了更快地迭代,以及跟进社 ...
- JDK 每半年就会更新一次新特性,再不掌握就要落伍了:JDK8 的新特性
该图片由Alexandr Podvalny在Pixabay上发布 你好,我是看山. 本文收录在 <Java 进阶> 系列专栏中. 从 2017 年开始,JDK 版本更新策略从原来的每两年一 ...
- C++11\14\17\20 新特性整理
文章目录 C++11 新特性 01 auto 与 decltype 02 defaulted 与 deleted 函数 03 final 与 override 04 尾置返回类型 05 右值引⽤ 06 ...
- Java 10正式发布,带来了这些新特性
点击上方"程序员小灰",选择"置顶公众号" 有趣有内涵的文章第一时间送达! 本文转载自公众号 InfoQ 作者 | 张建锋编辑 | 郭蕾 北京时间 3 月 2 ...
- smartgit 22.1 2022年11月发布了,新特性以及重点
1.新特性 1.0 概述:这个版本,拖了好久才发布,经过了4个RC版本,终于发布.相对于之前版本,我个人觉得就是多了一个新的视图方式.以tab页的方式显示多打开的git库.本地分支管理也方便易用一些. ...
最新文章
- Stream Processing: S4系统模型分析和关键源码读解
- PHP7 学习笔记(六)403 Forbidden - WAMP Server 2.5
- dbsync for oracle ms sql,DBSync for Firebird and MSSQL
- python哪些系统可以运行_python可以检测它在哪个操作系统下运行吗?
- C++ 多态与虚函数面试题
- java模板代码生成器(还不是有手就行)
- 创新工场 蔡学镛SINA微博中向我们提及的书籍、文章统计 (二)
- discuz的css文件在哪里,谁能告诉我discuz模板文件在哪个文件夹下?
- 双创项目_宫颈癌智能风险检测(3)
- 【AiLearning】test3:搭建Deep Netural Network
- 关于@Vaild注解的使用
- 初期投资60万7-11加盟模式在华将变通
- web前端知识总结二(css(其他)+移动web网页开发)
- VS2019制作DLL文件
- 基于python的马尔科夫链在股价预测中的应用(基于Tushare)
- v-on:click(简写@click)绑定事件加括号和不加括号
- 版式设计中的黑白灰空间感营造
- java代码安全审计_《网络安全java代码审计实战》
- 基于PHP+MySQL+Apache在线考试管理系统(附源码)
- 中石油测井板块市场现状分析
热门文章
- [FAQ12836]如何用CMD 去开关AAL 各个子feature
- 基于51单片机和Proteus仿真含代码和仿真图的路灯自动控制系统(光控)
- react如何修改标签页名
- 如何在某些情况下禁止提交Select下拉框中的默认值或者第一个值(默认选中的就是第一个值啦……)...
- 美国大兵的22条作战条例
- 重学巩固你的Vuejs知识体系(上)
- c4d启动无反应_C4D画笔工具用不了/无法使用/没反应/无效怎么解决?
- TM1621/HT1621 段码LCD驱动器
- 这个在线代码编辑器,可以把代码分享给任何人!
- 大专学计算机专业,大专计算机专业是学什么内容