JDK16 新特性

JDK16

338:Vector API (Incubator)
347:Enable C++14 Language Features
357:Migrate from Mercurial to Git
369:Migrate to GitHub
376:ZGC: Concurrent Thread-Stack Processing
380:Unix-Domain Socket Channels
386:Alpine Linux Port
387:Elastic Metaspace
388:Windows/AArch64 Port
389:Foreign Linker API (Incubator)
390:Warnings for Value-Based Classes
392:Packaging Tool
393:Foreign-Memory Access API (Third Incubator)
394:Pattern Matching for instanceof
395:Records
396:Strongly Encapsulate JDK Internals by Default
397:Sealed Classes (Second Preview)

孵化阶段的矢量API(孵化)

Vector API (Incubator)

jdk.incubator.vector,以表达在可支持的CPU架构上编译为最佳硬件指令的矢量计算,以实现优于等效标量计算的性能。

// Example 1
static final VectorSpecies<Float> SPECIES = FloatVector.SPECIES_256;

void vectorComputation(float[] a, float[] b, float[] c) {

    for (int i = 0; i < a.length; i += SPECIES.length()) {
        var m = SPECIES.indexInRange(i, a.length);
		// FloatVector va, vb, vc;
        var va = FloatVector.fromArray(SPECIES, a, i, m);
        var vb = FloatVector.fromArray(SPECIES, b, i, m);
        var vc = va.mul(va).
                    add(vb.mul(vb)).
                    neg();
        vc.intoArray(c, i, m);
    }
}

// Example 2
static final VectorSpecies<Float> SPECIES = FloatVector.SPECIES_256;

void vectorComputation(float[] a, float[] b, float[] c) {
    int i = 0;
    int upperBound = SPECIES.loopBound(a.length);
    for (; i < upperBound; i += SPECIES.length()) {
        // FloatVector va, vb, vc;
        var va = FloatVector.fromArray(SPECIES, a, i);
        var vb = FloatVector.fromArray(SPECIES, b, i);
        var vc = va.mul(va).
                    add(vb.mul(vb)).
                    neg();
        vc.intoArray(c, i);
    }

    for (; i < a.length; i++) {
        c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
    }
}

启用C++ 14语言功能

Enable C++14 Language Features

启用C++ 14语言功能,允许在JDK C++源代码中使用C++ 14功能,并提供有关在HotSpot代码中可以使用哪些功能的具体指导。

OpenJDK源代码仓库从Mercurial迁移至Git。

Migrate from Mercurial to Git

如题

迁移到GitHub

Migrate to GitHub

这个变化是基于OpenJDK源码库迁移至Git的,JDK 16源代码仓库将出现在最流行的程序员社交网站上。

ZGC:并发线程堆栈处理

ZGC: Concurrent Thread-Stack Processing

ZGC垃圾收集器旨在使HotSpot中的GC暂停和可伸缩性问题成为过去。实现了并发thread-stack处理来降低GC safepoints的负担

Unix-Domain Socket Channels

Unix-Domain Socket Channels

对socket channel及server socket channel的api提供对unix domain socket的支持,其中Unix-Domain(AF_UNIX)套接字的支持被添加到nio.channels包中的Socket Channel和Server Socket Channel API中。

Alpine Linux移植

Alpine Linux Port

在x64和AArch64架构上,将JDK移植到Alpine Linux和其他使用musl作为其主要C库的Linux发行版。Musl是 ISO C和Posix标准中描述的标准库功能的Linux实现。Alpine Linux由于其镜像小而被广泛应用于云部署、微服务以及容器环境中。Linux版本的Docker容器镜像小于6MB。让Java在此类设置中开箱即用地运行,并允许Tomcat、Jetty、Spring和其它流行的框架在这些环境中工作。通过使用jlink来减少Java运行时的大小,用户可以创建一个更小的镜像,以运行特定的应用程序。

弹性Metaspace

Elastic Metaspace

更及时地将未使用的HotSpot类元空间(Metaspace)内存返回给操作系统,减少元空间占用空间,并简化元空间代码,以降低维护成本。

Windows/AArch64

Windows/AArch64 Port

将JDK移植到Windows/AArch64平台

外部链接程序API(孵化)

Foreign Linker API (Incubator)

孵化阶段的外部链接程序API,支持静态类型的纯Java方式访问本地代码。此计划的目的在于通过用更高级的纯Java开发模式来替换JNI(Java本机接口),以提供与C语言的交互。它的性能将会比JNI更加优越。

提供jdk.incubator.foreign来简化native code的调用

基于值的类的警告建议

Warnings for Value-Based Classes

将原始包装类指定为基于值的类,弃用其构造函数以进行移除,并提示新的弃用警告。在Java平台中对于任何基于值的类的实例进行同步的错误尝试会予以警告。

提供@jdk.internal.ValueBased来用于标注作为value-based的类

Double d = 20.0;
synchronized (d) { ... } // javac warning & HotSpot warning
Object o = d;
synchronized (o) { ... } // HotSpot warning
// -------------------------------------
@jdk.internal.ValueBased
public final class SomeVbc {

    public SomeVbc() {}

    final String ref = "String";

    void abuseVbc() {

        synchronized(ref) {           // OK
            synchronized (this) {     // WARN
            }
        }
    }
}

jpackage工具

Packaging Tool

jpackage在JDK14引入,JDK15作为incubating工具,在JDK16转正,从jdk.incubator.jpackage转为jdk.jpackage。它支持Linux: deb and rpm、macOS: pkg and dmg、Windows: msi and exe。提供用于打包独立的Java应用程序的jpackage工具。

外部内存访问API

Foreign-Memory Access API (Third Incubator)

Foreign-Memory Access API在JDK14首次引入作为incubating API,在JDK15处于第二轮incubating,在JDK16处于第三轮incubating

instanceof操作符的模式匹配

Pattern Matching for instanceof

在JDK 14和JDK 15中都已预览过,将于JDK 16最终确定。模式匹配使程序中的通用逻辑(即从对象中有条件的提取组件)可以更简洁、安全的表达。

Record

Records

提供Record记录类,作为不可变数据的透明载体。在JDK14作为preview,在JDK15处于第二轮preview,在JDK16转正。

默认强封装 JDK 内部组件

Strongly Encapsulate JDK Internals by Defaults

默认情况下,JDK内部结构是强封装的,而关键内部API(例如misc.Unsafe)除外。此计划的目标包括提高JDK的安全性和可维护性,并鼓励开发人员从直接使用内部元素逐渐迁移为使用标准API,这样开发人员和最终用户都可以轻松地升级到 Java 的未来版本。

密封类

Sealed Classes (Second Preview)

之前在JDK 15中进行过预览,JDK 16中二次预览的密封类和接口限制了可以扩展或实现它们的类和接口。此计划的目标包括允许类或接口的创建者控制负责实现它的代码,提供比访问修饰符更声明性的方式来限制超类的使用,并通过提供模式分析基础来支持模式匹配的未来发展。

参考资料

JDK 16 (java.net)

JDK 16 Release Notes, Important Changes, and Information (oracle.com)

[The Arrival of Java 16 (oracle.com)](https://blogs.oracle.com/java/post/the-arrival-of-java-16)

博客

(3) Java16的新特性 - SegmentFault 思否

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值