百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Java16的新特性

toyiye 2024-06-21 12:27 9 浏览 0 评论

本文主要讲述一下Java16的新特性

版本号

java -version
openjdk version "16" 2021-03-16
OpenJDK Runtime Environment (build 16+36-2231)
OpenJDK 64-Bit Server VM (build 16+36-2231, mixed mode, sharing)

从version信息可以看出是build 16+36

特性列表

JEP 338: Vector API (Incubator)

提供了jdk.incubator.vector来用于矢量计算,实例如下

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);
    }
}

JEP 347: Enable C++14 Language Features

在JDK C++的源码中允许使用C++14的语言特性

JEP 357: Migrate from Mercurial to Git

OpenJDK源码的版本控制从Mercurial (hg) 迁移到git

JEP 369: Migrate to GitHub

将OpenJDK源码的版本控制迁移到github上

JEP 376: ZGC: Concurrent Thread-Stack Processing

实现了并发thread-stack处理来降低GC safepoints的负担

JEP 380: Unix-Domain Socket Channels

对socket channel及server socket channel的api提供对unix domain socket的支持

JEP 386: Alpine Linux Port

将glibc的jdk移植到使用musl的alpine linux上

JEP 387: Elastic Metaspace

支持不再使用的class metadata归还内存给操作系统,降低内存占用

JEP 388: Windows/AArch64 Port

移植JDK到Windows/AArch64

JEP 389: Foreign Linker API (Incubator)

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

JEP 390: Warnings for Value-Based Classes

提供@jdk.internal.ValueBased来用于标注作为value-based的类,实例如下

@jdk.internal.ValueBased
public final class SomeVbc {

    public SomeVbc() {}

    final String ref = "String";

    void abuseVbc() {

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

final class AuxilliaryAbuseOfVbc {

    void abuseVbc(SomeVbc vbc) {

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

JEP 392: Packaging Tool

jpackage在JDK14引入,JDK15作为incubating工具,在JDK16转正,从jdk.incubator.jpackage转为jdk.jpackage。它支持Linux: deb and rpm、macOS: pkg and dmg、Windows: msi and exe

JEP 393: Foreign-Memory Access API (Third Incubator)

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

JEP 394: Pattern Matching for instanceof

instanceof的模式匹配在JDK14作为preview,在JDK15作为第二轮的preview,在JDK16转正

JEP 395: Records

Record类型在JDK14作为preview,在JDK15处于第二轮preview,在JDK16转正

JEP 396: Strongly Encapsulate JDK Internals by Default

对内部的api进行更多的封装,鼓励开发者从使用内部的方法迁移到标准的API,但是sun.misc.Unsafe还是继续保留

JEP 397: Sealed Classes (Second Preview)

Sealed Classes在JDK15作为preview引入,在JDK16作为第二轮preview

细项解读

上面列出的是大方面的特性,除此之外还有一些api的更新及废弃,主要见JDK 16 Release Notes,这里举几个例子。

添加项

  • Add InvocationHandler::invokeDefault Method for Proxy's Default Method Support (JDK-8159746)

给InvocationHandler添加invokeDefault方法

  • Day Period Support Added to java.time Formats (JDK-8247781)

java.time支持Day Period

  • Add Stream.toList() Method (JDK-8180352) (JDK-8180352)

Stream新增toList方法

  • Concurrently Uncommit Memory in G1 (JDK-8236926)

针对G1提供了并发归还内存给操作系统

移除项

  • Removal of Experimental Features AOT and Graal JIT (JDK-8255616)

移除jaotc工具

  • Deprecated Tracing Flags Are Obsolete and Must Be Replaced With Unified Logging Equivalents (JDK-8256718)

使用-Xlog:class+load=info替代-XX:+TraceClassLoading;使用-Xlog:class+unload=info替代-XX:+TraceClassUnloading;使用-Xlog:exceptions=info替代-XX:+TraceExceptions

废弃项

  • Terminally Deprecated ThreadGroup stop, destroy, isDestroyed, setDaemon and isDaemon (JDK-8256643)

废弃ThreadGroup的stop, destroy, isDestroyed, setDaemon, isDaemon方法

  • Deprecated the java.security.cert APIs That Represent DNs as Principal or String Objects (JDK-8241003)

废弃了java.security.cert.X509Certificate的getIssuerDN()、getSubjectDN()方法

已知问题

  • Incomplete Support for Unix Domain Sockets in Windows 2019 Server (JDK-8259014)

Unix Domain Sockets对Windows 2019 Server的支持还不完善

  • TreeMap.computeIfAbsent Mishandles Existing Entries Whose Values Are null (JDK-8259622)

TreeMap.computeIfAbsent方法针对null的处理与规范有偏差

其他事项

  • Enhanced Support of Proxy Class (JDK-8236862)

对Proxy Class进行了增强,支持jdk.serialProxyInterfaceLimit属性

  • Support Supplementary Characters in String Case Insensitive Operations (JDK-8248655)

对compareToIgnoreCase、equalsIgnoreCase、regionMatches方法的Case Insensitive语义进行了增强

  • HttpClient.newHttpClient and HttpClient.Builder.build Might Throw UncheckedIOException (JDK-8248006)

HttpClient.newHttpClient及HttpClient.Builder.build方法可能抛出UncheckedIOException

  • The Default HttpClient Implementation Returns Cancelable Futures (JDK-8245462)

默认的HttpClient实现返回Cancelable Futures

小结

Java16主要有如下几个特性

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

doc

  • JDK 16 Features
  • JDK 16 Release Notes
  • Oracle JDK 16 Release Notes
  • Java SE deprecated-list
  • The Arrival of Java 16
  • Java 16 and IntelliJ IDEA

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码