下载 jdk-10.0.2_osx-x64_bin.dmg官方镜像版
新版本说明:
JDK10 从JDK中移除了javah 工具。该工具已被JDK8 (JDK-7150368)中添加javac高级功能所取代。此功能提供了在编译java源代码时编写本机头文件的功能,从而无需使用单独的工具。
Unicode 标签扩展
JDK10 改善 java.util.Locale 类和相关的 API 以实现额外 BCP 47 语言标签的 Unicode 扩展。尤其以下扩展支持:
cu:货币类型
fw:一周的第一天
rg:区域覆盖
tz:时区
为支持以上扩展,JDK10对以下API进行更改:
java.text.DateFormat::get*Instance:将根据扩展ca、rg或tz返回实例。
java.text.DateFormatSymbols::getInstance:将根据扩展rg返回实例。
java.text.DecimalFormatSymbols::getInstance:将根据扩展rg返回实例。
java.text.NumberFormat::get*Instance:将根据nu或rg返回实例。
java.time.format.DateTimeFormatter::localizedBy:将返回DateTimeFormatter 根据ca,rg或rz的实例。
java.time.format.DateTimeFormatterBuilder::getLocalizedDateTimePattern:将根据rg返回String。
java.time.format.DecimalStyle::of:将返回DecimalStyle根据nu或rg的实例。
java.time.temporal.WeekFields::of:将返回WeekFields根据fw或rg的实例。
java.util.Calendar::{getFirstDayOfWeek,getMinimalDaysInWeek}:将根据fw或rg返回值。
java.util.Currency::getInstance:将返回Currency根据cu或rg返回实例。
java.util.Locale::getDisplayName:将返回一个包含这些U扩展名的显示名称的字符串。
java.util.spi.LocaleNameProvider:将为这些U扩展的键和类型提供新的SPI。
备用内存设备上分配堆内存
启用HotSpot VM以在用户指定的备用内存设备上分配Java对象堆。随着廉价的NV-DIMM内存的可用性,未来的系统可能配备了异构的内存架构。这种技术的一个例子是英特尔的3D XPoint。这样的体系结构,除了DRAM之外,还会有一种或多种类型的非DRAM内存,具有不同的特征。具有与DRAM具有相同语义的可选内存设备,包括原子操作的语义,因此可以在不改变现有应用程序代码的情况下使用DRAM代替DRAM。所有其他的内存结构,如代码堆、metaspace、线程堆栈等等,都将继续驻留在DRAM中。
参考以下使用案例:
在多JVM部署中,某些JVM(如守护进程,服务等)的优先级低于其他JVM。与DRAM相比,NV-DIMM可能具有更高的访问延迟。低优先级进程可以为堆使用NV-DIMM内存,允许高优先级进程使用更多DRAM。
诸如大数据和内存数据库等应用程序对内存的需求不断增加。这种应用可以将NV-DIMM用于堆,因为与DRAM相比,NV-DIMM可能具有更大的容量,成本更低。
基于实验JAVA 的JIT 编译器
启用基于Java的JIT编译器Graal,将其用作Linux / x64平台上的实验性JIT编译器。Graal是一个基于Java的JIT编译器,它是JDK 9中引入的Ahead-of-Time(AOT)编译器的基础。使它成为实验性JIT编译器是Project Metropolis的一项举措,它是下一步是研究JDK的基于Java的JIT的可行性。
使Graal可用作实验JIT编译器,从Linux / x64平台开始。Graal将使用JDK 9中引入的JVM编译器接口(JVMCI)。Graal已经在JDK中,因此将它作为实验JIT将主要用于测试和调试工作。要启用Graal作为JIT编译器,请在java命令行上使用以下选项:
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler
Root 证书
在JDK中提供一组默认的root 认证权威(CA)证书。在Oracle的Java SE根CA程序中开源root证书,以使OpenJDK构建对开发人员更有吸引力,并减少这些构建和Oracle JDK构建之间的差异。
cacerts密钥存储库是JDK的一部分,它的目的是包含一组root证书,这些root证书可以用来在各种安全协议中使用的证书链中建立信任。然而,JDK源代码中的cacerts密钥库目前是空的。因此,诸如TLS之类的关键安全组件在OpenJDK构建中不会默认工作。为了解决这个问题,用户必须配置和填充cacerts密钥库,并使用一组root证书来记录,例如, JDK 9 release notes。
基于时间的版本控制
在JEP 223 引入的版本字符串方案比以往有了显著的改进,但是,该方案并不适合未来,现在Java SE平台和JDK的新版本严格按照六个月的节奏发布。JEP 223方案的主要困难在于发行版的版本号对于其前身的重要性和兼容性进行了编码。然而,在基于时间发布模式中,这些品质并不是事先知道的。在发布的开发周期中,它们可能会发生变化,直到最终的功能被集成为止。因此发布的版本号也是未知的。
使用JEP 223的版本号语义,每个在JDK发布版上工作或者在其上构建或使用组件的人都必须先说明发布的发布日期,然后切换到说版本号,已知。维护库,框架和工具的开发人员必须准备好更改在每个JDK发布周期后期检查版本号的代码。这对所有参与者来说都很尴尬和混乱。
因此,这里提出的主要改变是重新编制版本号来编码,而不是编码的兼容性和重要性,而是按照发布周期的时间推移。这是更适合基于时间的发布模型,因为每个发布周期,因此每个发布的版本号,总是提前知道。
后续的版本格式为:[1-9][0-9]*((\.0)*\.[1-9][0-9]*)*
该格式可以是任意长度,但前四个被赋予特定含义,如:$FEATURE.$INTERIM.$UPDATE.$PATCH
$FEATURE:功能发布计数器,不管发布内容如何,都会为每个功能发布增加。功能可能会添加到功能发布中; 如果提前通知提前至少发布一次功能发布,它们也可能会被删除。如果合理,可能会做出不兼容的更改。
$INTERIM:临时版本计数器,对于包含兼容错误修复和增强功能的非功能版本递增,但没有不兼容的更改,没有功能移除,也没有对标准API的更改。
$UPDATE:更新版本计数器增加了兼容更新版本,可解决新功能中的安全问题,回归和错误。
$PATCH:紧急修补程序释放计数器只有在需要生成紧急释放以解决关键问题时才会增加。
版本号永远不会有零元素结尾。如果一个元素及其后的所有元素在逻辑上具有零值,那么它们全部被省略。
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。