Java平台,标准版
Oracle JDK 9中的新增功能
版本9
E77563-05
2017年9月
JDK 9中的新功能概述
Java Platform,Standard Edition 9是一个主要的功能版本。以下总结了Java SE 9和JDK 9的特点和增强功能,Oracle 对于 Java SE 9的实现。
JDK增强提案(JEP)是对JDK设计和实施非常重要更改的提案。参阅JEP 1:JDK增强提案和路线图流程。Java规范请求(JSR)描述了Java平台的建议和最终规范。请参阅JSR概述。
JDK 9中的重要变化
这些变化影响了多个技术领域。
特征 | 描述 |
---|---|
Java平台模块系统 | 推出了一种新的Java编程组件--模块,是一个指定的,自描述代码和数据的集合。 模块系统:
JDK本身已经被分为一组模块。这个变化:
有关详细信息,请参阅以下内容:
|
JEP 223:新的Version-String方案 | 提供简化的version-string格式,有助于清楚区分主要,次要,安全和补丁更新版本。 新的版本字符串格式如下:
请参阅在Java平台,标准版安装指南中新的Version-String格式。 |
JDK 9安装程序的新功能
JDK 9包括Microsoft Windows和MacOS平台的安装程序增强功能。
Microsoft Windows的安装程序增强功能
特征 | 描述 |
---|---|
使用安装程序的用户界面启用或禁用Web部署 | 提供在安装程序的“ 欢迎”页面中启用或禁用Web部署的选项。要启用Web部署,请在“ 欢迎”页面中选择“ 自定义安装”,单击“ 安装”,然后选中“ 在浏览器中启用Java内容”复选框。 |
macOS的安装程序增强功能
特征 | 描述 |
---|---|
CPU版本可用性 | 在卸载当前CPU版本后,提供关于下一个CPU可用性的通知。 |
用户体验 | 优化更新JRE时用户体验。 |
JDK 9中的工具的新功能
这些是JDK 9中的工具增强功能。
特征 | 描述 |
---|---|
JEP 222:jshell:Java Shell(Read-Eval-Print Loop) | 将交互式解释器环境(REPL)功能添加到Java平台。 该 参见 JShell API使应用程序能够利用REPL功能。请参阅jdk.jshell包。 |
JEP 228:添加更多诊断命令 | 定义其他诊断命令,以提高诊断Hotspot和JDK问题的能力。 请参阅在Java平台,标准版工具参考中 |
JEP 231:删除启动时JRE版本选择 | 删除请求JRE版本的能力,该版本不是在启动时启动的JRE。 现代应用程序通常通过Java Web Start(使用JNLP文件),本机OS打包系统或活动安装程序进行部署。这些技术有自己的方法来管理根据需要查找或下载和更新所需的JRE。这使得启动时JRE版本选择过时。 |
JEP 238:多版本JAR文件 | 扩展JAR文件格式,以便在单个存档中共享多个Java版本的类文件。 多版本JAR(MRJAR)包含针对特定Java平台版本的类和资源的附加版本目录。使用 |
JEP 240:删除JVM TI hprof代理 |
注意: 当 |
JEP 241:删除jhat工具 |
该 |
JEP 245:验证JVM命令行标志参数 | 验证所有数值JVM命令行标志的参数以避免出现故障,如果发现它们无效,则会显示相应的错误消息。 已经为需要用户指定数值的参数实现了范围和可选约束检查。 在Java平台标准版工具参考中查看 |
JEP 247:编译旧版平台版本 | 增强 使用 请参阅在Java平台,标准版工具参考中 |
JEP 282:jlink:Java连接器 | 组合并优化一组模块及其依赖关系到自定义运行时映像,如JEP 220中定义。 该 请参阅在Java平台,标准版工具参考中 |
JDK 9中的安全性新增功能
这些是JDK 9中的安全增强功能。
特征 | 描述 |
---|---|
JEP 219:数据报传输层安全(DTLS) | 启用Java安全套接字扩展(JSSE)API和SunJSSE安全提供程序以支持DTLS版本1.0和DTLS版本1.2协议。 请参阅在Java平台,标准版安全开发人员指南中数据报传输层安全(DTLS)。 |
JEP 244:TLS应用层协议协商扩展 | 使传输层安全(TLS)连接中的客户端和服务器协商要使用的应用协议。使用应用层协议协商(ALPN),客户端将发送支持的应用协议列表作为TLS ClientHello消息的一部分。服务器选择协议,并将所选协议作为TLS ServerHello消息的一部分返回。应用协议协商可以在TLS握手中完成,而不需要添加网络往返。 请参阅在Java平台,标准版安全开发人员指南中TLS握手和应用层协议协商。 |
JEP 249:用于TLS的OCSP装订 | 启用TLS连接中的服务器以检查撤销的X.509证书撤销状态。服务器在TLS握手期间通过联系有关证书的在线证书状态协议(OCSP)响应者来执行此操作。然后,它将撤销信息附加或“装订”到其返回给客户端的证书,以便客户端可以采取适当的措施。 使客户端能够从TLS服务器请求OCSP装订。客户端检查来自支持该功能的服务器的装订响应。 请参阅在Java平台,标准版安全开发人员指南中OCSP装订。 |
JEP 246:利用GHASH和RSA的CPU指令 |
使用RSA HotSpot内在函数,
请参阅在Java平台,标准版安全开发人员指南中配置特定算法的首选提供程序。 |
JEP 273:基于DRBG的SecureRandom实现 | 提供API 中NIST SP 800-90Ar1中规定的确定性随机位发生器(DRBG)机制的 DRBG机制使用与SHA-512和AES-256一样强大的现代算法。这些机制中的每一个都可以配置不同的安全强度和功能,以匹配用户需求。 请参阅在Java平台,标准版安全开发人员指南中生成随机数字。 |
JEP 288:禁用SHA-1证书 | 通过提供更灵活的机制,通过基于SHA-1的签名,来禁用X.509证书链,以改进JDK的安全配置。 禁用在默认情况下包含在JDK中的由根链接的TLS服务器证书链中的SHA-1; 本地或企业认证机构(CA)不受影响。
见JEP 288。 |
JEP 229:默认创建PKCS12密钥库 | 将默认密钥库类型从JKS修改为PKCS12。PKCS#12是一种可扩展,标准和广泛支持的存储加密密钥的格式。PKCS12密钥库通过存储私钥,可信公钥证书和密钥来提高机密性。此功能还为与其他系统(如Mozilla,Microsoft的Internet Explorer和支持PKCS12的OpenSSL)的互操作性提供了机会。 SunJSSE提供商,提供了 请参阅在Java平台,标准版安全开发人员指南中密钥管理。 该 请参阅在Java平台,标准版安全开发人员指南中创建密钥库,和在Java平台,标准版工具参考中 |
JEP 287:SHA-3哈希算法 | 支持NIST FIPS 202中指定的SHA-3加密散列函数。
以下提供商支持SHA-3算法增强功能:
|
JDK 9中部署的新功能
这些是JDK 9中的部署增强功能。
特征 | 描述 |
---|---|
不赞成使用Java插件 | 在Oracle JDK 9版本中弃用Java插件和关联的小应用程序技术。在JDK 9中仍然可用,这些技术将被考虑在将来的版本中从Oracle JDK和JRE中删除。 嵌入在网页中的Applet和JavaFX应用程序需要Java插件才能运行。考虑将这些类型的应用程序重新编写为Java Web Start或自包含的应用程序。 请参阅在Java平台标准版部署指南中将Java Applet迁移到Java Web Start和JNLP和自包含应用程序打包。 |
增强的Java控制面板 | 改进Java控制面板中选项的分组和显示。信息更容易找到,可用字段搜索,并且不再使用模态对话框。请注意,某些选项的位置已从先前版本的Java控制面板中更改。 请参阅在Java平台,标准版部署指南中Java控制面板。 |
JEP 275:模块化Java应用程序打包 | 将Project Jigsaw的功能集成到Java Packager中,包括模块感知和自定义运行时创建。 利用该 创建程序只能使用JDK 9运行时。不能使用早期版本的JRE来运行打包应用程序。 请参阅在Java平台,标准版部署指南中JRE的定制和打包的模块化应用。 |
JEP 289:弃用Applet API | 弃用Applet API,因为Web浏览器供应商删除对Java浏览器插件的支持,导致这个功能越来越不太有用。在JDK 9中这个功能仍然可用,Applet类将在以后的版本中被考虑删除。考虑将applet重写为Java Web Start或自包含的应用程序。 请参阅在Java平台,标准版部署指南中将Java Applet迁移到Java Web Start和JNLP和自包含应用程序打包。 |
JDK 9中Java语言的新特性
Java SE 9中包含了一些非常小的语言更改。
特征 | 描述 |
---|---|
JEP 213:Milling Project Coin | 确认一些小的变化:
请参阅在Java平台,标准版的Java语言的更新中Java语言在Java SE 9中的改变。 |
JDK 9中Javadoc的新功能
Javadoc增强功能包括以下内容:简化的Doclet API,Javadoc搜索,支持生成HTML5输出以及支持模块系统中的文档注释。
特征 | 描述 |
---|---|
JEP 221:简化的Doclet API | 用新的简化API替代旧的Doclet API,利用其他标准的现有API。标准doclet已被重写,以使用新的Doclet API。 注意: 现有的API和旧的标准doclet可用,但尚未更新以支持新的语言功能,如模块。 |
JEP 224:HTML5 Javadoc | 支持生成HTML5输出。要获得完全兼容的HTML5输出,请确保文档注释中提供的任何HTML内容都符合HTML5。 |
JEP 225:Javadoc Search | 为生成的API文档提供搜索框。使用此搜索框查找文档中的程序元素,标记的单词和短语。 |
JEP 261:模块系统 | 支持模块声明中的文档注释。包括新的命令行选项来配置要记录的模块集,并为任何正在记录的模块生成新的摘要页面。 |
JDK 9中JVM的新特性
这些是JDK 9中的JVM增强功能。
特征 | 描述 |
---|---|
JEP 165:编译器控制 | 提供通过编译器指令选项控制JVM编译的方法。控制的级别是运行时管理和方法的指定。编译器控件取代了CompileCommand并向后兼容。 请参阅在Java平台,标准版Java虚拟机向导中编译器控制。 |
JEP 197:分段代码缓存 | 将代码高速缓存分成不同的段,每个段都包含特定类型的编译代码,以提高性能并启用未来的扩展。 请参阅在Java平台,标准版工具参考中 |
JEP 276:语言定义对象模型的动态链接 | 在运行时动态链接高级对象操作,例如读取属性,编写属性和调用函数到相应的目标方法句柄。它根据传递的值的实际类型将这些操作链接到目标方法句柄。这些对象操作表示为invokedynamicsites。 虽然java.lang.invoke提供了一个用于动态链接invokedynamic调用站点的低级API ,但它并没有提供一种方法来表达对象的更高级别操作,也不提供实现它们的方法。 使用包jdk.dynalink,您可以实现其表达式包含动态类型(无法静态确定的类型)的编程语言,并将这些动态类型的操作表示为invokedynamic调用站点(因为语言的对象模型或类型系统不会紧密匹配JVM)。 |
JDK 9中JVM调优的新功能
这些是JDK 9中的JVM调优增强功能。
特征 | 描述 |
---|---|
提高G1的可用性,确定性和性能 | 增强垃圾回收(G1)垃圾收集器,自动确定几个重要的内存回收设置。以前,必须手动设置这些设置才能获得最佳结果。此外,还解决了G1垃圾收集器的可用性,确定性和性能问题。 |
JEP 158:统一JVM记录 | 为JVM的所有组件引入通用日志记录系统。 请参阅Java Platform,Standard Edition Tools Reference中的 |
JEP 214:删除JDK 8中不推荐使用的GC组合 | 删除在JDK 8中不推荐使用的垃圾收集器(GC)组合。 这意味着以下GC组合不再存在:
同时标记扫描(CMS)的“前景”模式也已被删除。以下命令行标志已被删除:
命令行标志 |
JEP 248:使G1成为默认垃圾收集器 | 在第32和64位服务器配置上,将Garbage-First (G1)作为默认垃圾收集器(GC)。使用诸如G1之类的低暂停收集器为大多数用户提供比面向吞吐量的收集器(例如以前是默认值的Parallel GC)更好的整体体验。 请参阅在Java平台,标准版的HotSpot虚拟机垃圾收集调优指南中 Garbage-First 垃圾收集器 |
JEP 271:统一GC记录 | 使用JEP 158中引入的统一JVM日志记录框架对垃圾收集(GC)进行日志记录。GC记录以与当前GC记录格式一致的方式重新实现; 然而,新旧格式之间存在一些差异。 请参阅在Java平台,标准版工具参考中启用日志记录使用JVM统一日志记录框架。 |
JEP 291:弃用并发标记扫描(CMS)垃圾收集器 | 不推荐使用并发标记扫描(CMS)垃圾回收器。使用该 |
JDK 9中核心库的新功能
特征 | 描述 |
---|---|
JEP 102:进程API更新 | 改进用于控制和管理操作系统进程的API。 所述ProcessHandle类提供的过程的本机过程ID,自变量,命令,开始时间,累积CPU时间,用户,父进程,和后代。该类还可以监视进程的活动并销毁进程。使用ProcessHandle.onExit方法,CompletableFuture类的异步机制可以在进程退出时执行一个操作。 请参阅的Java平台,标准版Java的核心库开发指南中进程API,java.lang.Process和java.lang.ProcessHandle。 |
JEP 193:变量操作 | 定义一个标准的方法来调用对象字段和数组元素上的java.util.concurrent.atomic和sun.misc.Unsafe操作的等价物。 定义一组标准的外围操作,由VarHandle静态方法组成,可以对内存排序进行细粒度的控制。这是sun.misc.Unsafe的替代方法,它提供了一组非标准的外围操作。 定义标准可达性外围操作,以确保引用的对象保持强力的可访问性。 |
JEP 254:紧凑型字符串 | 对字符串采用更节省空间的内部表示。以前,String类在char数组中存储字符,每个字符使用两个字节(16位)。String类的新内部表示是一个字节数组加上一个编码标志字段。 这完全是一种实现变更,而不改变现有的公共接口。 请参阅Java Platform,Standard Edition Tools Reference |
JEP 264:平台日志API和服务 | 定义平台类可用于记录消息的最小记录API,以及消息者的服务接口。库或应用程序可以提供此服务的实现,将平台日志消息路由到其选择的日志记录框架。如果没有提供实现,则使用基于java.util.logging API 的默认实现。 |
JEP 266:更多并发更新 | 添加在JDK 8中引入的未来并发更新到JEP 155:并发更新,包括可互操作的发布 - 订阅框架和对CompletableFuture API的增强。 |
JEP 268:XML目录 | 添加标准XML目录API,该API支持结构化信息标准(OASIS)XML目录1.1版标准的组织。API定义了目录和目录解析器抽象,可以用作内部或外部解析器,JAXP处理器可以接受解析器。 使用内部目录API的现有库或应用程序将需要迁移到新的API以利用新功能。 见XML目录API的Java平台,标准版Java的核心库开发人员指南。 |
JEP 269:集合的便利工厂方法 | 使用少量元素创建集合和映射的实例更容易。对于
请参阅在Java平台“标准版Java核心库开发人员指南”中创建不可变的列表,集合和映射。有关API文档,请参阅不可变静态工厂方法,不可变Map静态工厂方法和不可变列表静态工厂方法。 |
JEP 274:增强方法句柄 | 增强java.lang.invoke包的MethodHandle,MethodHandles和MethodHandles.Lookup类,以简化常见的用例并实现更好的编译器优化。 补充包括:
|
JEP 277:增强Deprecated | 修改@Deprecated注释,以提供有关规范中API的状态和预期配置的更好信息。增加了两个新元素:
例如:@Deprecated(since =“9”,forRemoval = true) @Deprecated注解在核心平台中已更新。 您可以使用新工具 请参阅在Java平台,标准版Java的核心库开发人员指南中增强弃用。 请参阅在Java平台,标准版工具参考中 |
JEP 285:自旋等待提示 | 定义一个API,使Java代码能够提示自旋循环正在执行。自旋循环重复检查条件是否为真,例如可以获取锁定,之后可以安全地执行一些计算,然后释放锁定。这个API纯粹是一个提示,并且没有语义行为的要求。请看Thread.onSpinWait的方法。 |
JEP 290:过滤进入的序列化数据 | 允许对对象序列化数据的传入流进行过滤,以提高安全性和鲁棒性。对象序列化客户端可以更容易地验证其输入,并且导出的远程方法调用(RMI)对象也可以更容易地验证调用参数。 序列化客户端实现在ObjectInputStream上设置的过滤器接口。对于RMI,通过RemoteServerRef导出对象,该RemoteServerRef将MarshalInputStream上的过滤器设置为在未调用时验证调用参数。 |
JEP 259:Stack-Walking API | 提供了一个Stack-Walking API,允许轻松过滤和延迟地访问堆栈跟踪中的信息。 该API支持两个短步,停止在与给定条件匹配的框架上,以及遍历整个堆栈的漫步。在符合给定标准的帧上停止,如果调用者只对堆栈中的顶部帧感兴趣,则避免检查所有帧的成本。当堆栈步行器配置为这样时,API可以访问Class对象。请参阅java.lang.Stackwalker类。 |
JEP 255:合并所选Xerces 2.11.0更新到JAXP | 更新JDK以支持2.11.0版本的Xerces解析器。公共JAXP API没有变化。 更改在Xerces 2.11.0的以下类别中:数据类型,DOM L3序列化程序,XPointer,目录解析器和XML模式验证(包括错误修复,但不是XML模式1.1开发代码)。 |
Nashorn在JDK 9中的新功能
这些是JDK 9中的Nashorn增强功能。
特征 | 描述 |
---|---|
JEP 236:Nashorn的解析器API | 使应用程序,特别是IDE和服务器端框架能够解析和分析ECMAScript代码。 使用Parser类中的方法从字符串,URL或文件解析ECMAScript代码。这些方法返回一个CompilationUnitTree的实例,它表示ECMAScript代码作为抽象语法树。 包jdk.nashorn.api.tree包含Nashorn解析器API。 |
JEP 292:在Nashorn中实现所选的ECMAScript 6功能 | 实现了第六版ECMA-262(也称为ECMAScript 6)或简称ES6 引入的许多新功能。实施的功能包括:
|
JDK 9中客户端技术的新功能
这些是JDK 9中的客户端技术增强功能。
特征 | 描述 |
---|---|
JEP 251:多分辨率图像 | 使一组具有不同分辨率的图像被封装到单个多分辨率图像中。这对应用程序来说适用于在运行时分辨率可能会从大约96dpi到300dpi变化的显示设备。 接口java.awt.image.MultiResolutionImage将一组具有不同分辨率的图像封装到单个多分辨率图像中,使应用程序能够轻松地操作和显示具有分辨率变体的图像。 |
JEP 253:准备用于模块化的JavaFX UI控件和CSS API | 为JavaFX UI控件和CSS功能提供公共API,以前只能通过内部软件包提供,但由于模块化而无法访问。 新包 新类 |
JEP 256:BeanInfo注释 |
这些注释类型在运行时在BeanInfo生成期间设置相应的特征属性。因此,您可以更容易地直接在Bean类中指定这些属性,而不是为每个Bean类创建一个单独的BeanInfo类。它还可以删除自动生成的类,这使得更容易模块化客户端库。 |
JEP 262:TIFF图像I / O | 将标签图像文件格式(TIFF)作为标准读取和写入添加到javax.imageio包中。新包javax.imageio.plugins.tiff提供了简化TIFF元数据可选操作的类。 |
JEP 263:Windows和Linux上的HiDPI Graphics | 在Windows和Linux上自动缩放和调整AWT和Swing组件,以实现高位数/英寸(HiDPI)显示。 JDK已经在OS X上支持HiDPI“视网膜显示”。 在此版本之前,在Windows和Linux上,Java应用程序基于像素进行了大小和渲染,即使在可以具有传统显示器的二至三倍像素密度的HiDPI显示器上也是如此。这导致GUI组件和窗口太小,无法读取或使用。 |
JEP 272:平台特定的桌面功能 | 向类java.awt.Desktop添加其他方法,使您能够与桌面交互,包括以下内容:
这些新方法替代了包含在OS X软件包com.apple.eawt中的内部API的功能,它们在JDK 9中默认不可访问。请注意,软件包com.apple.eio不再可访问。 |
JEP 283:在Linux上启用GTK 3 | 启用Java图形应用程序,无论是基于JavaFX,Swing还是抽象窗口工具包(AWT),都可以在Linux或Solaris上使用GTK +版本2或版本3。 默认情况下,Linux或Solaris上的JDK使用GTK + 2(如果可用)如果没有,它使用GTK + 3。 要使用特定版本的GTK +,请设置系统属性 |
JDK 9中的国际化新进展
这些是JDK 9中的国际化增强。
特征 | 描述 |
---|---|
JEP 267:Unicode 8.0 | 支持Unicode 8.0。JDK 8支持的Unicode 6.2。 Unicode的6.3,7.0和8.0标准相结合引入10555个字符,29个脚本,和42个块,所有这些在JDK 9都被支持。 |
JEP 252:默认情况下启用CLDR区域设置数据 | 使用首先在JDK 8中添加的,公共区域设置数据存储库(CLDR),基于XML的区域设置数据,作为JDK 9中的默认语言环境数据。在以前的版本中,默认值为JRE。 要启用与JDK 8兼容的行为,请将系统属性 请参阅在Java平台,标准版国际指南中CLDR语言环境数据通过默认启用。 |
JEP 226:UTF-8属性文件 | 以UTF-8编码加载属性文件。在以前的版本中,加载属性资源束时使用了ISO-8859-1编码。UTF-8是一种非常方便的表示非拉丁字符的方法。 大多数现有的属性文件不应受到影响。 请参阅在Java平台,标准版国际指南中UTF-8属性文件。 |
文档辅助功能
有关Oracle对可访问性的承诺的信息,请访问Oracle辅助功能计划网站:http://www.oracle.com/pls/topic/lookup?ctx=acc& id=docacc。
翻译时间仓促,所以先使用机器翻译,以便能大概明白其中重要意思,希望能对大家了解JDK9新特性有所帮助,各个翻译细节正在努力完善中,大家有什么好的翻译意见可以留言告知我,我会尽力修改完善, 原文链接https://docs.oracle.com/javase/9/whatsnew/toc.htm#JSNEW-GUID-825576B5-203C-4C8D-85E5-FFDA4CA0B346
© 著作权归作者所有
原文链接https://my.oschina.net/gemron/blog/1541837
今日头条号:搜索 "JavaLeader" (欢迎大家关注支持,头条更精彩)
java资源分享总群(六) :238600498 java招聘信息共享群:489895481
java微信技术群:微信搜索18335013040加好友,拉入群内。