JDK 16 新特性:
JDK 16 为用户提供了17项主要的增强/更改,包括全新的 Java 语言改进,工具和内存管理,以及还有一些孵化和预览特性,有了这些新功能,Java 会进一步提高开发人员的生产力。值得关注的变化是,JDK 14 中提供的预览特性:模式匹配和记录(Records),经过一年的社区反馈和实际应用,终于在 JDK 16 中完成最终落地了。
另外,Oracle 还为 Java SE 订阅服务中免费提供 GraalVM 企业版服务,GraalVM 可以帮助提高应用程序的性能并减少资源消耗,尤其是在微服务和云原生架构中。
1. 338: Vector API (孵化)
这个不是集合中的Vector,而是一个新的初始迭代孵化器模块jdk.incubator.vector,用于表示在运行时可靠地编译到支持的 CPU 架构上的最佳矢量硬件指令的矢量计算。
2. 347: Enable C++14 Language Features
允许在 JDK 底层的C++源代码中使用C++14的新语言特性,并且提供了在HotSpot虚拟机代码中,哪些代码使用了这些新特性的指南。
3. 357: Migrate from Mercurial to Git
将 OpenJDK 社区的源代码存储库从 Mercurial 迁移到 Git。
4. 369: Migrate to GitHub
在 GitHub 上托管 OpenJDK 社区的 Git 存储库。
GitHub 是世界流行的Git代码托管平台。在国内,托管代码推荐 Gitee哦。
5. 376: ZGC: Concurrent Thread-Stack Processing
ZGC 最早是在 JDK 11 中集成进来的,在 JDK 15 中正式转正。
这个版本则是为了让 ZGC 支持并发栈处理,解决了最后一个重大瓶颈,把 ZGC 中的线程栈处理从安全点移到了并发阶段。并且还提供了一种机制,使得其他 HotSpot 子系统可以通过该机制延迟处理线程栈。
6. 380: Unix-Domain Socket Channels
UNIX 域套接字通道,为 java.nio.channels 包中的套接字通道和服务端套接字通道 APIs 增加 Unix 域套接字通道所有特性支持。
UNIX 域套接字主要用于同一主机上的进程间通信(IPC),大部分方面与 TCP/IP套接字类似,不同的是 UNIX 域套接字是通过文件系统路径名寻址,而不是通过 IP 地址和端口号。
7. 386: Alpine Linux Port
在 x64 和 AArch64 平台体系结构上,将 JDK 移植到 Alpine Linux 以及使用 musl 作为其主要 C 语言库的其他 Linux 发行版中。
8. 387: Elastic Metaspace
弹性的元空间,可以帮助 HotSpot 虚拟机,将元空间中未使用的 class 元数据内存更及时地返回给操作系统,以减少元空间的内存占用空间。
另外,还简化了元空间的代码,以降低维护成本。
9. 388: Windows/AArch64 Port
将 JDK 移植到 Windows/ AArch64 平台系列。
10. 389: Foreign Linker API (孵化)
引入了一个新的 API,该 API 提供了对本地 native 代码的静态类型访问支持。
11. 390: Warnings for Value-Based Classes
基于值的类的警告,将基础类型包装类指定为基于值的类,废除其构造函数以进行删除,从而提示新的弃用警告。并且提供了在任何基于值的类的实例上不正常进行同步的警告。
12. 392: Packaging Tool
提供了 jpackage 打包工具,可用于打包独立的 Java 应用程序。
jpackage 打包工具是在 JDK 14 中首次作为孵化工具引入的新特性,到了 JDK 15 它仍然还在孵化中,现在它终于转正了。
13. 393: Foreign-Memory Access API (三次孵化)
该 API 允许 Java 应用程序安全有效地访问 Java 堆之外的外部内存。
这个最早在 JDK 14 中成为孵化特性,JDK 15/ JDK 16 中继续二、三次孵化并对其 API 有了一些更新,这个可以在 JDK 17 中好好期待一下转正。
14. 394: Pattern Matching for instanceof
模式匹配 for instanceof,相当于是增强的 instanceof,在 JDK 14 中首次成为预览特性,在 JDK 16 中正式转正。
模式匹配的到来将使得 instanceof 变得更简洁、更安全
15. 395: Records
简单来说,Records 就是一种新的语法糖,目的还是为了简化代码,在 JDK 14 中首次成为预览特性,在 JDK 16 中正式转正。
Records 可以在一定程度上避免低级冗余的代码,比如:constructors, getters, equals(), hashCode(), toString() 方法等,相当于 Lombok 的 @Data 注解,但又不能完全替代。
16. 396: Strongly Encapsulate JDK Internals by Default
JDK 内部默认强封装,JDK 16 开始对 JDK 内部大部分元素默认进行强封装,sun.misc.Unsafe 之类的关键内部 API 除外,从而限制对它们的访问。
此外,用户仍然可以选择自 JDK 9 以来的默认的宽松的强封装,这样可以帮助用户毫不费力地升级到未来的 Java 版本。
17. 397: Sealed Classes (二次预览)
封闭类(二次预览),可以是封闭类和或者封闭接口,用来增强 Java 编程语言,防止其他类或接口扩展或实现它们
JDK环境变量配置方法
JDK(TM)7 32位安装成功,还需要对JDK的环境变量进行配置才能正常使用,具体操作如下:
右击【计算机】,选择【属性】,进入系统页面,点击【高级系统设置】,然后进入系统属性页面,点击【高级】——【环境变量】,
如图,在【系统变量】下点击【新建】,弹出对话框,变量名为【JAVA_HOME】,变量值是指安装JDK的路径,小编安装在C:\Program Files (x86)\Java\jre7,点击确定,
在系统变量中找到Path变量,进行编辑,弹出对话框,变量名为Path,在变量值中添加输入【;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;】,
注意,不要删除原来Path的变量值,直接在后面输入代码,点击确定,
找到CLASSPATH,没有就要新建,变量名为CLASSPATH,变量值为【.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 】,点击确定,
返回桌面,检测JDK是否配置成功,按【Win+R】,弹出运行窗口,输入cmd,打开命令提示符
输入java -version(java 和 -version之间有空格),出现如图信息,说明配置成功了。