JDK 13(2019-09) 新增功能和遗弃的功能

JDK 13 New Features And Removed Features

1. New Features 新功能

1.1 core-libs 核心库

1.1.1 【java.nio】FileSystems 新增方法 newFileSystem()

  • newFileSystem(Path)
  • newFileSystem(Path, Map<String, ?>)
  • newFileSystem(Path, Map<String, ?>, ClassLoader)

1.1.2 【java.nio】ByteBuffer 定义了批量get和put方法传输字节,无需考虑缓冲区位置

1.1.3 【java.time】日本的新年号

JapaneseEra.of(3)
JapaneseEra.valueOf(“Reiwa”)

1.1.4 【java.util】i18n 支持Unicode 12.1

1.2 hotspot 热点

1.2.1 【gc】ZGC 不提交未使用的存储器
    ZGC(Z garbage collector)

    ZGC会将未使用的堆(heap)内存返回给操作系统。减少内存占用。

    默认启动该功能,可通过以下配置显式禁用该功能。另外如果最小堆(-Xms)大小等于最大堆(-Xmx)大小,将隐式禁用该功能。

-XX:-ZUncommit

    通过以下配置设置未提交的延时时长,默认延时时长为300s

-XX:ZUncommitDelay=

1.2.2 【gc】添加-XXSoftMaxHeapSize
    通过该配置,使得GC 注重控制堆增长,避免内存溢出。该配置必须启用ZGC 才生效。

-XX:+UseZGC
-XX:SoftMaxHeapSize=

1.2.3 【gc】ZGC 最大堆内存从4TB 扩展到16TB

1.2.4 【runtime】JEP 350:动态CDS 归档
    JEP 350
    扩展应用程序类数据共享,以允许在Java应用程序执行结束时动态归档类。归档的类将包括默认基层CDS归档中不存在的所有已加载应用程序类和库类。

1.3 security-libs 安全库

1.3.1 【java.security】CRL 可配置读取超时
    配置下面这个系统属性,来设置CRL 检索的最大读取超时时长;单位为秒,默认15s,值为0 表示时间无限长。

com.sun.security.crl.readtimeout

1.3.2 【java.security】查看TLS 配置信息的命令

keytool -showinfo -tls

1.3.3 【javax.crypto】支持MS CNG 密码学
    CNG(Cryptography Next Generation)

    SunMSCAPI提供程序现在支持读取下一代加密(CNG)格式的私钥。支持从Windows密钥库(例如“ Windows-MY”)中加载CNG格式的RSA和EC密钥。

1.3.4 【javax.crypto:pkcs11】SunPKCS11 提供更新升级以支持PKCS#11 V2.40

1.3.5 【javax.net.ssl】TLS 支持X25519 和X448

1.3.6【javax.net.ssl】JSSE 程序无状态支持恢复会话
    TLS 服务器会将内部会话(session)信息以加密会话票证的形式,发送给支持无状态的客户端。该加密会话票证会在与TLS 握手期间,呈现给服务器,以恢复会话。

    新增加两个系统属性来支持该特性:
        client 用在客户端,用于在TLS 1.2的ClientHello 消息上切换会话票据扩展,false(默认) 不发送票据扩展, true 发送票据扩展。
        server 当客户端支持时,允许服务器使用无状态的会话票证,不支持无状态会话票证的客户端将使用缓存。false(默认) 不支持无状态,true 支持无状态。

jdk.tls.client.enableSessionTicketExtension: false
jdk.tls.server.enableSessionTicketExtension: false

1.3.7 【javax.security】允许禁用SASL 机制
    下面的安全属性支持禁用SASL 机制。

jdk.sasl.disabledMechanisms

    SASL 机制
    在Sasl.createSaslClient 或Sasl.createSaslServer 指定禁用的机制mechanisms/mechanism。此安全属性的默认值为空,这意味着没有任何机制被禁用。


String[] mechanisms = new String[]{"DIGEST-MD5", "PLAIN"}; 
SaslClient sc = Sasl.createSaslClient(mechanisms, authzid, protocol, 
                serverName, props, callbackHandler);


SaslServer ss = Sasl.createSaslServer(mechanism, protocol, 
                  myName, props, callbackHandler);

1.3.8 【javax.xml.crypto】用于Canonical XML 1.1 URI的新字符串常量
    javax.xml.crypto.dsig.CanonicalizationMethod API 增加了下面的字符串常量。分别代表带有XML签名注释算法的Canonical XML 1.1和Canonical XML 1.1的URI。

INCLUSIVE_11
INCLUSIVE_11_WITH_COMMENTS

1.3.9 【javax.xml.crypto】[xmldsig]添加了KeyValueEC_TYPE
    目前支持W3C XML 签名语法和处理建议中描述的ECKeyValue 类型。
    新的EC_TYPE 类型常量已添加到javax.xml.crypto.dsig.keyinfo.KeyValue 接口。
    当前仅支持NamedCurve 域参数类型,并且不支持ECParameters 显式曲线参数类型。

1.3.10 【org.ietf.jgss】在Windows上添加了默认的本地GSS-API 库
    Windows 已将本地GSS-API 库添加到JDK,可以通过将system属性sun.security.jgss.lib 设置为其路径来加载第三方本机GSS-API库。也可以通过一下配置来加载启动它。

sun.security.jgss.native: true

1.3.11 【org.ietf.jgss:krb5】支持Kerberos跨域引用(RFC 6806)
    通过支持RFC 6806 协议扩展定义的主体名称规范化和跨领域引用,增强了Kerberos客户端。
    默认启动该特性,且5 是允许的引荐跃点的最大数量。通过下面配置设置关闭该特性,可自定义最大引荐跃点。

sun.security.krb5.disableReferrals: false
sun.security.krb5.maxReferrals: 10

1.4 tools 工具

1.4.1 【javac】Switch 表达式的模式匹配

分支程序:

String formatted = "unknown";
if (obj instanceof Integer i) {
    formatted = String.format("int %d", i);
}
else if (obj instanceof Byte b) {
    formatted = String.format("byte %d", b);
}
else if (obj instanceof Long l) {
    formatted = String.format("long %d", l);
}
else if (obj instanceof Double d) {
    formatted = String.format("double %f", d);
}
else if (obj instanceof String s) {
    formatted = String.format("String %s", s);
}

    方式一:

String formatted;
switch (obj) {
    case Integer i: formatted = String.format("int %d", i); break;
    case Byte b:    formatted = String.format("byte %d", b); break;
    case Long l:    formatted = String.format("long %d", l); break;
    case Double d:  formatted = String.format("double %f", d); break;
    case String s:  formatted = String.format("String %s", s); break
    default:        formatted = obj.toString();
}

    方式二:
        注意:表达式obj 最多匹配以下条件之一。复杂度O(1),扩展表达式和语句的case 标签switch 以采用类型测试模式,而不仅仅是常量。

String formatted = 
    switch (obj) {
        case Integer i -> String.format("int %d", i)
        case Byte b    -> String.format("byte %d", b);
        case Long l    -> String.format("long %d", l); 
        case Double d  -> String.format("double %f", d); 
        case String s  -> String.format("String %s", s); 
        default        -> obj.toString();
    };

1.4.2 【javac】文本块
    Java 支持text blocks;文本块是一种多行字符串文字,它避免了大多数转义序列的需要,以一种可预测的方式自动设置字符串的格式,并在需要时使开发人员可以控制格式。 这是JDK 13中的预览语言功能。

1.5 xml

1.5.1 【jaxp】命名空间支持创建DOM 和SAX 工厂的新方法
    默认情况下,添加了用于实例化具有命名空间支持的DOM 和SAX 工厂的新方法。这些方法在它们的现有方法之前以"NS"作为前缀,"NS"代表NamespaceAware。

  • newDefaultNSInstance()
  • newNSInstance()
  • newNSInstance(String factoryClassName, ClassLoader classLoader)

    使用这些新方法,默认情况下,通过工厂创建的解析器将为NamespaceAware。例如,以下语句:

DocumentBuilder db = DocumentBuilderFactory.newDefaultNSInstance().newDocumentBuilder();

    等效于:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newDefaultInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();

2. Removed Features and Options 删除的功能和建议

2.1 client-libs 客户端库

2.1.1 移除系统属性 awt.toolkit
    并未真正的移除,只是在JDK 1.9 及之后从文档上移除了;该类由于模块系统封装,并且是内部细节,不支持直接操作。以前读取此属性的应用程序,仍然可以通过实例化AWT 工具包和该实例查询类的名称来获取它。

2.2 core-libs 核心库

2.2.1 【java.lang】移除运行时跟踪方法
    java.lang.Runtime 移除了下面的方法,方法的预期功能目前被Java Virtual Machine Tool Interface (JVMTI) 提供。

traceInstructions(boolean)traceMethodCalls(boolean)

2.2.2 【java.net】SocketImpl 不再支持JDK 1.4 之前的实现
    移除了JDK 1.3 及更早版本的SocketImpl 自定义实现,对JDK1.4 及之后的实现无影响。

2.3 hotspot 热点

2.3.1 【runtime】移除VM项:-XX:+AggressiveOpts
    在JDK 11 中不建议使用该配置,在JDK 12 使用该配置会有警告,且忽略该配置使其不起作用。在JDK 13 中使用该配置会初始化错误。

-XX:+AggressiveOpts

2.4 security-libs 安全库

2.4.1 【java.security】SunJSSE 不再支持重复的RSA 服务
    以下RSA 服务SunJSSE 不再提供支持

  • RSA KeyFactory
  • RSA KeyPairGenerator
  • MD2withRSA
  • MD5withRSA
  • SHA1withRSA Signature

2.4.2 【java.security】移除T-Systems Deutsche Telekom Root CA 2 证书
    该证书已过期,并从cacerts 密钥库移除。

  • 别名:deutschetelekomrootca2 [jdk]
    专有名称:CN = Deutsche Telekom Root CA 2,OU = T-TeleSec Trust Center,O = Deutsche Telekom AG,C = DE

2.4.3 【java.security】移除两个DocuSign root CA 证书
    证书已过期,并从cacerts 秘钥库移除。

  • 别名:certplusclass2primaryca [jdk]
    专有名称:CN=Class 2 Primary CA, O=Certplus, C=FR
  • 别名:certplusclass3pprimaryca [jdk]
    专有名称:CN=Class 3P Primary CA, O=Certplus, C=FR

2.4.4【java.security】移除两个Comodo Root CA 证书
    证书已过期,并从cacerts 秘钥库移除。

  • 别名:utnuserfirstclientauthemailca [jdk]
    专有名称:CN=UTN-USERFirst-Client Authentication and Email, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US
  • 别名:utnuserfirsthardwareca [jdk]
    专有名称:CN=UTN-USERFirst-Hardware, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US

2.4.5【javax.net.ssl】删除仅用于与旧版JSSE 1.0 应用程序兼容的内部软件包

2.4.6【javax.net.ssl】移除SunJSSE 提供的实验性FIPS 140 兼容模式
    FIPS(Federal Information Processing Standards)

    实验性FIPS 140 兼容模式已从SunJSSE 提供程序中删除。FIPS Publication 140-2是一种针对密码模块的安全需求标准。

2.5 tools 工具

2.5.1 【javadoc】移除javadoc 中四个废弃的功能
    以下四个功能已从javadoc工具中删除:

  • 使用HTML4 生成API 文档
  • 使用HTML 框架生成API 文档
  • 对旧的javadoc API 的支持
    包括jdk.javadoc 模块中的 com.sun.javadoc,com.sun.tools.doclets.standard,com.sun.tools.javadoc.Start
  • 对项–no-module-directories 的支持

3. JDK 13 Release Notes 发行说明

扩展查看:发行说明

THE END

发布了132 篇原创文章 · 获赞 312 · 访问量 100万+

猜你喜欢

转载自blog.csdn.net/niaonao/article/details/102587396
今日推荐