官方正式发布 Java 16
发布日期:2021-06-30 12:37:40 浏览次数:3 分类:技术文章

本文共 3124 字,大约阅读时间需要 10 分钟。

文章目录


前言

就在2021/03/16,官方正式发布了Java 16。我们可以下载使用Java 16了。

在这里插入图片描述

特性

向量API(孵化)

在运行期,Vector 表示向量计算可以可靠地编译成支持CPU架构上的最佳矢量硬件指令,从而实现优于等效标量计算的性能。提升了Java在CPU向量计算的性能。

启用c++ 14 语言特性

允许在JDK中C++源代码中使用 C ++ 14的新特性,并给出哪些特性可能在热点代码中使用的具体指导。

从Mercurial迁移到Git

将OpenJDK社区的源代码库从Mercurial (hg)迁移到Git。

迁移到GitHub

在GitHub上托管OpenJDK社区的Git仓库。与JEP 357(从Mercurial迁移到Git)一起,这将把所有存储库OpenJDK项目迁移到GitHub上,包括JDK特性版本和版本11及以后的JDK更新版本。

ZGC 并发线程堆栈处理

将ZGC线程堆栈处理从安全点移动到并发阶段。

Unix-Domain 套接字通道

在java.nio.channels包中,为socket channel和server-socket channel api增加Unix-domain(AF_UNIX)套接字支持。

Alpine Linux Port

在x64和AArch64架构上,将JDK移植到Alpine Linux和其他使用musl作为主要C库的Linux发行版上。

Elastic Metaspace

更及时地将未使用的热点类元数据(即metaspace元空间)内存返回给操作系统,减少元空间的占用,并简化元空间代码,以减少维护成本。

Windows/AArch64 Port

将 JDK 移植到 Windows / AArch64。随着新的消费者级和服务器级AArch64 (ARM64)硬件的发布,Windows/AArch64已经成为终端用户需求的一个重要平台。

Foreign Linker API(孵化)

引入一个API,该API提供对本机代码的静态类型纯java访问。这个API,与外部内存API (JEP 393),能极大简化绑定到本机库的容易出错的过程。

基于值的类的警告

将原始包装类指定为基于值的类,并弃用它们的构造函数以便删除,并提示新的弃用警告。提供关于在Java平台中任何基于值类的实例上进行同步的警告。

打包工具

提供jpackage工具,用于打包自包含的Java应用程序。

外部内存访问API(第三次孵化)

引入一个API,允许Java程序安全有效地访问Java堆之外的外部内存。

为instanceof进行模式匹配

使用对instanceof操作符的模式匹配来增强Java编程语言。模式匹配允许程序中的公共逻辑,即从对象中有条件地提取组件,以更简洁和更安全的方式表达。

以前我们使用是这样的,先判断类型,再强制转换。

if (obj instanceof String) {
String s = (String) obj; ...}

Java 16中,可以这样使用了,直接使用变量s。

if (obj instanceof String s) {
// 可以直接使用s ...}

还可以这样使用,但是前提是第一个判断成立,第二个才能正确执行,所以可以使用&&,不能使用||。

if (obj instanceof String s && s.length() > 5) {
flag = s.contains("jdk");}

Records

用Records关键字增强Java编程语言,Records作为不可变数据透明载体的类。

以前我们定义一个类是这样的,如下:

class Point {
private final int x; private final int y; Point(int x, int y) {
this.x = x; this.y = y; } int x() {
return x; } int y() {
return y; } public boolean equals(Object o) {
if (!(o instanceof Point)) return false; Point other = (Point) o; return other.x == x && other.y == y; } public int hashCode() {
return Objects.hash(x, y); } public String toString() {
return String.format("Point[x=%d, y=%d]", x, y); }}

在Java 16中,只需要简洁的如下定义:

record Point(int x, int y) {
}

默认情况下对JDK内部进行强封装

默认情况下,强烈封装JDK的所有内部元素,除了关键的内部api,如sun.misc.Unsafe。允许最终用户选择宽松的强封装,这是自JDK 9以来的默认封装。提高了JDK的安全性和可维护性。

Sealed Classes

使用密封的类和接口增强Java编程语言。密封的类和接口限制了其他类或接口可以扩展或实现它们。

public abstract sealed class SealedHuman permits Student, Teacher {
protected final String name; public abstract void speak(); public SealedHuman(String name) {
this.name = name; }}public final class Student extends SealedHuman {
public Student(String name) {
super(name); } public void speak() {
System.out.println("student name:" + name); } public void study() {
System.out.println(name +" is studying"); }}public final class Teacher extends SealedHuman {
public Teacher(String name) {
super(name); } public void speak() {
System.out.println("Teacher name:" + name); } public void teach() {
System.out.println(name +"is teache"); } }

转载地址:https://javalib.blog.csdn.net/article/details/114926545 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:MySQL 索引原理 图文讲解
下一篇:自定义校验注解ConstraintValidator

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月09日 01时06分21秒