Java 16正式发布 Java 16有哪些新特性
admin
2023-07-30 20:01:49
0

前言

就在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");
    }        
}

相关内容

热门资讯

QQ音乐提示代理模式可能无法正... QQ音乐提示代理模式可能无法正常访问,如上图所示,是怎么回事呢? 这个可能和你的网络设置有关系,首先...
玻璃硬盘原理图 玻璃硬盘原理 玻璃硬盘,又称为磁头悬浮硬盘(Magnetic Head Flying Disk,MHFD),是一种...
别人打电话听不见我说话怎么回事... 当我们在使用手机时,可能会遇到别人打电话过来听不见声音的情况,这种情况可能是由多种原因导致的,下面我...
frp内网穿透配置 HTTP ... HTTP 类型的代理相比于 TCP 类型,不仅在服务端只需要监听一个额外的端口 vhost_http...
家里监控最长能保存多少天的记录... 家里监控一般保存多久 随着科技的发展,家庭监控系统已经成为了许多家庭的必备设备,它不仅可以帮助我们...
广电4k机顶盒怎么连接 广电网... 四广电网络,即四家主流的广播电视网络运营商,包括中国电信、中国移动、中国联通和中国广电,这些运营商为...
hwid是永久激活吗 hwid... HWID,全称Hardware ID,是硬件识别码的缩写,它是计算机硬件制造商为了区分每一台设备而分...
当前安全设置不允许下载该文件的... 今天新装了一台服务器 在服务器上准备安装下载chrome浏览器,结果发现不能下载,提示当前安全设置不...
荣耀路由器中继和mesh 荣耀... 荣耀路由器中继连接后网络较慢的问题可能是由于多种原因造成的,以下是一些可能的解决方案: 1. 调整...
为什么我的局域网传输最高速度只... 网络传输的最高速度取决于你网络中瓶颈最小值。 比如传输的两台电脑 路由器等一切传输设备的限制。 这个...