有朋友问JDK14都增加了什么东西,
从https://www.oracle.com/java/technologies/javase/14-relnote-issues.html#NewFeature翻译来了一篇,分享出来,已经对文章的细节进行了调整。
总结主要的内容为
- 会计格式
- GC的变动
- JFR 事件流
core-libs
使用“ u-cf-account” Unicode 语言环境扩展调用 NumberFormat.getCurrencyInstance(Locale)
可以获得具有会计风格的货币格式实例,其中金额在某些区域设置中的括号中进行了格式化。例如,在 Locale.US 中,它将格式化为“($3.27)
”而不是“-$3.27
”。有关其他信息,请参考 CLDR 的会计货币格式样式。
See JDK-8215181
core-libs/java.lang
Core-libs/java. lang
在 JDK 14中,Records (jep359)预览特性添加了一个新的类 java.lang.Record
。java.lang
包是按需隐式导入的,即 import java.lang.*
。如果现有源文件中的代码需要导入其他包,例如,import com.myapp.*;
,而另一个包声明了一个名为 Record
的类型,那么引用该类型的现有源文件中的代码不进行更改将不能编译。要使代码编译,可以使用单一类型的导入导入另一个包的 Record
类型,例如,import com.myapp.Record;
。
See JDK-8222777
core-libs/java.nio
Core-libs/java. nio
DatagramChannel.receive()
, FileChannel.read(ByteBuffer,long)
, ReadableByteChannel.read()
, 和ScatteringByteChannel.read()
方法的说明已经在这个版本中更新,来说明如果(任何)缓冲区参数是只读的,则抛出 IllegalArgumentException
。这种改变仅仅是调整说明以适应现有的长期行为。
See JDK-8164993
hotspot/gc
Z 垃圾收集器(ZGC)现在是 Windows 上的一个实验性特性。要启用它,请使用 JVM 参数-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
。更多信息请参见 JEP 365: ZGC on Windows。
See JDK-8232364
见 JDK-8232364
hotspot/gc
Z 垃圾收集器(ZGC)现在是 Windows 上的一个实验性特性。要启用它,请使用 JVM 参数-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
。更多信息请参见 JEP 364: ZGC on macOS。
See JDK-8229358
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
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
hotspot/jfr
JDK Flight Recorder (JFR)现在支持对 Java 应用程序的持续监视,允许使用 JDK.JFR.consumer 包中的新 API 动态消费事件。当使用 JFR 时,这个特性始终被开启,这意味着直到最后一秒的记录数据对于进程内和进程外消耗都是可用的。更多信息请参见 JEP 349: JFR Event Streaming。
See JDK-8184193
见 JDK-8184193
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
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
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
xml/jaxp
在SAX ContentHandler
中添加了一个新的方法 declaration
,以接收 XML 声明的通知。通过实现此方法,应用程序可以完全按照输入文档中声明的那样,接收版本、编码和独立属性的值。
See JDK-8230814
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
deploy
过时的 netscape.javascript.JSObject::getWindow
方法已被移除。这种方法在 JDK 9中已经被否决(deprecated)了。从 JDK 11开始,不再有使用这种方法的有用方法; 它总是返回 null
。
See JDK-8222563
hotspot/gc
CMS 垃圾收集器已被删除。-XX:UseConcMarkSweepGC
和别名-Xconcgc
and -Xnoconcgc
以及所有 CMS 特定选项(太多以至于无法列出)都废弃了。有关更多信息,请参见 JEP 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector
See JDK-8229049
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
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
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 c
的 n
子选项。更多信息请参见JEP 367: Remove the Pack200 Tools and API
See JDK-8232022