JDK 14的新特性和增强(原文转译)

有朋友问JDK14都增加了什么东西,

从https://www.oracle.com/java/technologies/javase/14-relnote-issues.html#NewFeature翻译来了一篇,分享出来,已经对文章的细节进行了调整。

总结主要的内容为

  • 会计格式
  • GC的变动
  • JFR 事件流

JDK 14的新特性和增强

会计货币格式支持

core-libs

使用“ u-cf-account” Unicode 语言环境扩展调用 NumberFormat.getCurrencyInstance(Locale)可以获得具有会计风格的货币格式实例,其中金额在某些区域设置中的括号中进行了格式化。例如,在 Locale.US 中,它将格式化为“($3.27)”而不是“-$3.27”。有关其他信息,请参考 CLDR 的会计货币格式样式

See JDK-8215181

Jep359 记录(预览)

core-libs/java.lang

Core-libs/java. lang

在 JDK 14中,Records (jep359)预览特性添加了一个新的类 java.lang.Recordjava.lang 包是按需隐式导入的,即 import java.lang.*。如果现有源文件中的代码需要导入其他包,例如,import com.myapp.*;,而另一个包声明了一个名为 Record 的类型,那么引用该类型的现有源文件中的代码不进行更改将不能编译。要使代码编译,可以使用单一类型的导入导入另一个包的 Record 类型,例如,import com.myapp.Record;

See JDK-8222777

ReadableByteChannel.read() 和相关方法的说明有了更清晰的版本

core-libs/java.nio

Core-libs/java. nio

DatagramChannel.receive(), FileChannel.read(ByteBuffer,long), ReadableByteChannel.read(), 和ScatteringByteChannel.read()方法的说明已经在这个版本中更新,来说明如果(任何)缓冲区参数是只读的,则抛出 IllegalArgumentException。这种改变仅仅是调整说明以适应现有的长期行为。

See JDK-8164993

JEP 365 Windows版本的 Z垃圾收集器

hotspot/gc

Z 垃圾收集器(ZGC)现在是 Windows 上的一个实验性特性。要启用它,请使用 JVM 参数-XX:+UnlockExperimentalVMOptions -XX:+UseZGC。更多信息请参见 JEP 365: ZGC on Windows

See JDK-8232364

见 JDK-8232364

JEP 364 macOS版本的 Z垃圾收集器

hotspot/gc

Z 垃圾收集器(ZGC)现在是 Windows 上的一个实验性特性。要启用它,请使用 JVM 参数-XX:+UnlockExperimentalVMOptions -XX:+UseZGC。更多信息请参见 JEP 364: ZGC on macOS

See JDK-8229358

Parallel GC 改进

hotspot/gc

Parallel GC has adopted the same task management mechanism for scheduling parallel tasks as other collectors. This might result in significant performance improvements. Because of this change, the following product flags have been obsoleted: -XX:BindGCTaskThreadsToCPUs, -XX:UseGCTaskAffinity, and -XX:GCTaskTimeStampEntries.

Parallel GC 已经采用了与其他收集器相同的任务管理机制来调度并行任务。这可能会导致显著的性能改进。由于这一更改,以下产品参数被废弃: -XX:BindGCTaskThreadsToCPUs, -XX:UseGCTaskAffinity, and -XX:GCTaskTimeStampEntries.

See JDK-8224666

JEP 345 G1 NUMA-Aware 内存分配

hotspot/gc

G1垃圾收集器现在试图在垃圾收集中的同一 NUMA 节点上分配和保留对象在新生代。这类似于 Parallel GC NUMA 感知。

G1试图使用严格的交织将 Humongous 和 老年代 均匀分布到所有可用 NUMA 节点上。从年轻一代复制到老一代的对象的放置是随机的。

使用 -XX:+UseNUMA 命令行选项,可以自动地启用这些新的支持NUMA-Aware的内存分配试探法。有关更多信息,请参见JEP 345: NUMA-Aware Memory Allocation for G1

See JDK-8210473

JEP 349 JFR 事件流

hotspot/jfr

JDK Flight Recorder (JFR)现在支持对 Java 应用程序的持续监视,允许使用 JDK.JFR.consumer 包中的新 API 动态消费事件。当使用 JFR 时,这个特性始终被开启,这意味着直到最后一秒的记录数据对于进程内和进程外消耗都是可用的。更多信息请参见 JEP 349: JFR Event Streaming

See JDK-8184193

见 JDK-8184193

默认情况下禁用 TLS、 CertPath 和 Signed JAR中的弱命名曲线

security-libs/java.security

将弱命名曲线添加到以下disabledAlgorithms安全属性,默认情况下禁用它们: ‘ jdk.tls.disableddactors’、‘ jdk.certpath.disableddactors’和‘ jdk.jar.disableddactors’。下面列出了命名曲线。

由于有47条弱命名曲线将被禁用,为每个 disabled 算法属性添加单独的命名曲线将是势不可挡的。为了解决这个问题,我们实现了一个新的安全属性,“ jdk.disabled.namedCurves” ,它可以列出所有 disabledAlgorithms属性共有的命名曲线。若要在disabledAlgorithms 属性中使用新属性,请在完整属性名称之前加上关键字 include。用户仍然可以添加单独的命名曲线到 disabledAlgorithms 属性中,这些属性与这个新属性分离。disabledAlgorithms 属性中不能包含其他属性。

要恢复已命名曲线,删除特定的或所有的 disabledAlgorithms 安全属性中的 include jdk.disabled.namedCurves。要恢复一条或多条曲线,请从jdk.disabled.namedCurves 属性中删除特定的命名曲线。

通过jdk.disabled.namedCurves 禁用的曲线包括: secp112r1,secp112r2,secp128r1,secp128r2,secp160k1,secp160r1,secp160r2,secp192k1,secp192r1,secp224k1,secp256k1,sect113r1,sect113r2,sect131r1,131r2,sect163k1,sect163r1,sect163r2,sect193r1,sect193r2,sect233k1,sect233r1,239k1,sect283k1,sect283r1,sect409k1,sect409r1,sect571k1,sect571r1,X9.62 c2tnb191v1,X9.62 c2tnb191v2,9.62 c2tnb191v3,X9.62 c2tnb239v1,X9.62 c2tnb239v2,X9.62 c2tnb239v3,X9.62 c2tnb359v1,9.62 c2tnb431r1,X9.62 prime192v2,X9.62 prime192v3,X9.62 prime239v1,X9.62 prime239v2,9.62 prime239v3,brainpoolP256r1,brainpoolP320r1,brainpoolP384r1,brainpoolP512r1

保持启用的曲线有: secp256r1,secp384r1,secp521r1,X25519,X448

See JDK-8233228

Apache Santuario Library更新到2.1.4版本

security-libs/javax.xml.crypto

Security-libs/javax.xml. crypto

Apache Santuario 库已经升级到2.1.4版本。因此,引入了一个新的系统属性com.sun.org.apache.xml.internal.security.parser.pool-size

这个新的系统属性通过在处理 XML 签名,来设置内部DocumentBuilder 使用的缓存的池大小。该函数等价于 Apache Santuario 中使用的 org.apache.xml.security.parser.pool-size系统属性,并具有相同的默认值20。

See JDK-8231507

允许默认调用 Discoverable javac 插件

tools/javac

javac “plugins” can now opt-in to be started by default if not started explicitly in the options passed to javac from the command-line or in the options argument of an API invocation. This behavior is enabled by implementing the method Plugin.isDefault() to return true.

如果没有在从命令行传递给 javac 的选项或 API 调用的 options 参数中显式启动,javac “plugins” 现在可以默认选择启动。通过实现方法 Plugin.isDefault()返回 true 来启用此行为。

See JDK-8234211

SAX ContentHandler 新方法处理 XML 声明

xml/jaxp

SAX ContentHandler中添加了一个新的方法 declaration,以接收 XML 声明的通知。通过实现此方法,应用程序可以完全按照输入文档中声明的那样,接收版本、编码和独立属性的值。

See JDK-8230814

移除的特性和选项

删除 sun.nio.cs.map 系统属性

core-libs/java.nio.charsets

Core-libs/java. nio.charsets

在 JDK 1.4.1中添加的系统属性 sun.nio.cs.map已被删除。它曾经是为帮助应用程序从旧的 Shift_JIS定义(相当于 MS Windows 代码页932)迁移到 IANA 定义的定义而提供的。使用映射属性的应用程序将需要根据其需要指定正确的字符集名称。

See JDK-8229960

删除 netscape.javascript.jsobjectgettwindow 方法

deploy

过时的 netscape.javascript.JSObject::getWindow方法已被移除。这种方法在 JDK 9中已经被否决(deprecated)了。从 JDK 11开始,不再有使用这种方法的有用方法; 它总是返回 null

See JDK-8222563

JEP 363 删除并发标记和清除(Concurrent Mark and Sweep,CMS)垃圾收集器

hotspot/gc

CMS 垃圾收集器已被删除。-XX:UseConcMarkSweepGC和别名-Xconcgc and -Xnoconcgc 以及所有 CMS 特定选项(太多以至于无法列出)都废弃了。有关更多信息,请参见 JEP 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector

See JDK-8229049

移除了已弃用的 java.security.acl api

security-libs/java.security

The deprecated java.security.acl APIs have been removed. This includes the following classes in that package: Acl, AclEntry, AclNotFoundException, Group, LastOwnerException, NotOwnerException, Owner, and Permission.

已弃用的 java.security.acl 已被删除。这包括该包中的以下类: Acl, AclEntry, AclNotFoundException, Group, LastOwnerException, NotOwnerException, Owner, and Permission.。

See JDK-8191138

删除默认keytool -keyalg值(Default keytool -keyalg Value)

security-libs/java.security

The default key algorithm for the keytool -genkeypair and keytool -genseckey commands has been removed. You must now specify the key algorithm by including the -keyalg option when using the -genkeypair or -genseckey commands. If the -keyalg option is not specified, the keytool will terminate with the error message: “The -keyalg option must be specified”.

keytool -genkeypair and keytool -genseckey命令的默认密钥算法已被删除。现在,您必须在使用-genkeypair or -genseckey 命令时通过包含-keyalg选项来指定密钥算法。如果未指定 -keyalg 选项,则 keytool将终止,并显示错误消息: “The -keyalg option must be specified(必须指定-keyalg 选项)”。

See JDK-8214024

JEP 367删除 Pack200工具和 API

tools/jar

The pack200 and unpack200 tools, added in JDK 5.0, have been removed. The class java.util.jar.Pack200 and the interfaces java.util.jar.Pack200.Packer and java.util.jar.Pack200.Unpacker have also been removed. These tools and API were deprecated for removal in Java SE 11 with the express intent to remove them in a future release. In addition, in the jar tool, the n sub-option to jar c has been removed. See JEP 367: Remove the Pack200 Tools and API for more information.

在 JDK 5.0中添加的pack200 and unpack200工具已经被删除。类java.util.jar.Pack200和接口 java.util.jar.Pack200.Packer and java.util.jar.Pack200.Unpacker 也被移走了。这些工具和 API 在 Java SE 11中已经被废弃,以便在将来的版本中删除它们。此外,在 jar 工具中,删除了jar cn子选项。更多信息请参见JEP 367: Remove the Pack200 Tools and API

See JDK-8232022

猜你喜欢

转载自blog.csdn.net/weixin_44494373/article/details/107345100