Java平台,标准版Oracle JDK 9中的新功能

Wesley13
• 阅读 765

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编程组件--模块,是一个指定的,自描述代码和数据的集合。

模块系统:

  • 引入一个新可选阶段,link time,它在编译和运行时之间,在此期间,可以将一组模块组合并且优化到一个自定义的运行时映像中;在 Java Platform, Standard Edition Tools Reference 中查看 jlink 工具。
  • 添加选项到工具javacjlinkjava,可以指定模块路径在哪里,哪一个定义模块的定位。
  • 引入模块化JAR文件,它是一个在根目录下包含module-info.class的JAR文件。
  • 推出JMOD格式,它是一种类似于JAR的打包格式,除了它可以包含原生代码和配置文件外; 参见jmod工具。

JDK本身已经被分为一组模块。这个变化:

  • 使您可以将JDK的模块组合到各种配置中,包括:

    • 对应于JRE和JDK的配置。
    • 和在Java SE 8中定义的各个紧凑型配置文件的内容大致相同的配置。
    • 只包含一组指定的模块及其所需模块的自定义配置。
  • 重新组织JDK和JRE运行时映像以适应模块,并提高性能,安全性和可维护性。

  • 定义新的用于命名模块,类和存储在运行时映像中的资源的URI方案,不会显示映像的内部结构或格式。

  • 删除endorsed-standards覆盖机制和扩展机制。

  • 删除rt.jartools.jarJava运行时映像。

  • 使大多数JDK的内部API默认无法访问,但留下一些关键的,广泛使用的内部API可访问,直到所有或大部分功能都支持替换。

    运行该命令jdeps -jdkinternals以确定您的代码是否使用内部JDK API。

有关详细信息,请参阅以下内容:

JEP 223:新的Version-String方案

提供简化的version-string格式,有助于清楚区分主要,次要,安全和补丁更新版本。

新的版本字符串格式如下:

$MAJOR.$MINOR.$SECURITY.$PATCH

  • $MAJOR是主要版本增加的版本号,例如JDK 9,其中包含由Java SE平台规范指定的重要新功能。主要版本包含新功能和对现有功能的更改,这些功能将提前计划和公布。

  • $MINOR 是为每个次要更新增加的版本号,例如错误修复,标准API的修订,或相关平台规范范围之外的功能实现。

  • $SECURITY 是针对安全更新版本增加的版本号,其中包含关键修复程序,包括提高安全性所需的修补程序。

  • $PATCH 是包含已经一起测试的安全性和高优先级客户修补程序的版本的版本号。

请参阅在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工具提供了一个交互式命令行界面,用于评估Java编程语言的声明,语句和表达式。它有助于原型设计和探索编码选项,具有即时的结果和反馈。直接的反馈结合开始表达的能力对于教育是有用的 - 无论是学习Java语言还是只学习新的API或语言功能。

请参阅在Java平台,标准版工具参考中jshell,和在Java平台,标准版的Java Shell用户指南中介绍JShell

JShell API使应用程序能够利用REPL功能。请参阅jdk.jshell包。

JEP 228:添加更多诊断命令

定义其他诊断命令,以提高诊断Hotspot和JDK问题的能力。

请参阅在Java平台,标准版工具参考中jcmd

JEP 231:删除启动时JRE版本选择

删除请求JRE版本的能力,该版本不是在启动时启动的JRE。

现代应用程序通常通过Java Web Start(使用JNLP文件),本机OS打包系统或活动安装程序进行部署。这些技术有自己的方法来管理根据需要查找或下载和更新所需的JRE。这使得启动时JRE版本选择过时。

JEP 238:多版本JAR文件

扩展JAR文件格式,以便在单个存档中共享多个Java版本的类文件。

多版本JAR(MRJAR)包含针对特定Java平台版本的类和资源的附加版本目录。使用jar工具--release选项指定版本化目录。

JEP 240:删除JVM TI hprof代理

hprof从JDK中删除代理。该hprof剂被写为JVM工具界面演示代码,而不是旨在成为一种生产工具。

hprof代理的有用功能已被更好的替代品所取代。

注意:

hprof代理已被删除时,仍然可以hprof使用jmap或其他诊断工具的格式创建堆转储。请参阅在Java平台,标准版故障排除指南中诊断工具

JEP 241:删除jhat工具

jhat从JDK中删除该工具。

jhat工具是JDK 6中添加的实验性和不受支持的工具。它已经过时了。高级堆可视化和分析仪已可用多年了。

JEP 245:验证JVM命令行标志参数

验证所有数值JVM命令行标志的参数以避免出现故障,如果发现它们无效,则会显示相应的错误消息。

已经为需要用户指定数值的参数实现了范围和可选约束检查。

在Java平台标准版工具参考中查看java验证Java虚拟机标志参数

JEP 247:编译旧版平台版本

增强javac以便它可以编译Java程序以在所选的早期版本的平台上运行。

使用-source-target选项时,编译的程序可能会意外地使用给定目标平台不支持的API。该--release选项将防止意外使用API​​。

请参阅在Java平台,标准版工具参考中javac

JEP 282:jlink:Java连接器

组合并优化一组模块及其依赖关系到自定义运行时映像,如JEP 220中定义。

jlink工具在组装过程中定义了用于转换和优化的插件机制,以及用于生成替代映像格式。它可以创建为单个程序优化的自定义运行时。JEP 261将链接时间定义为在编译时间和运行时间之间的可选阶段。链接时间需要一个链接工具来组合和优化一组模块及其传递依赖关系,以创建运行时映像或可执行文件。

请参阅在Java平台,标准版工具参考中jlink

JDK 9中的安全性新增功能

这些是JDK 9中的安全增强功能。

特征

描述

JEP 219:数据报传输层安全(DTLS)

启用Java安全套接字扩展(JSSE)API和SunJSSE安全提供程序以支持DTLS版本1.0DTLS版本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指令

AES/GCM/NoPadding使用GHASH HotSpot内在函数,性能提升34倍到150倍 。从PCLMULQDQ英特尔x64 CPU上的xmul/xmulhi指令和SPARC 上的说明,可以看到GHASH内在函数的加速。

使用RSA HotSpot内在函数,BigInteger squareToLenBigInteger mulAdd方法性能提高达50%。RSA内在函数适用于java.math.BigInteger类,在Intel x64平台上。

jdk.security.provider.preferred引入了新的安全属性,用来配置能显着提升特定算法性能的提供者。

请参阅在Java平台,标准版安全开发人员指南中配置特定算法的首选提供程序

JEP 273:基于DRBG的SecureRandom实现

提供API 中NIST SP 800-90Ar1中规定的确定性随机位发生器(DRBG)机制的SecureRandom功能。

DRBG机制使用与SHA-512和AES-256一样强大的现代算法。这些机制中的每一个都可以配置不同的安全强度和功能,以匹配用户需求。

请参阅在Java平台,标准版安全开发人员指南中生成随机数字

JEP 288:禁用SHA-1证书

通过提供更灵活的机制,通过基于SHA-1的签名,来禁用X.509证书链,以改进JDK的安全配置。

禁用在默认情况下包含在JDK中的由根链接的TLS服务器证书链中的SHA-1; 本地或企业认证机构(CA)不受影响。

jdk.certpath.disabledAlgorithms安全属性,加强几个新的约束,允许对可禁用的证书类型做更大的控制。

JEP 288

JEP 229:默认创建PKCS12密钥库

将默认密钥库类型从JKS修改为PKCS12。PKCS#12是一种可扩展,标准和广泛支持的存储加密密钥的格式。PKCS12密钥库通过存储私钥,可信公钥证书和密钥来提高机密性。此功能还为与其他系统(如Mozilla,Microsoft的Internet Explorer和支持PKCS12的OpenSSL)的互操作性提供了机会。

SunJSSE提供商,提供了java.security.KeyStore用于读取和写入PKCS12文件的PKCS12 格式的完整实现。

请参阅在Java平台,标准版安全开发人员指南中密钥管理

keytool密钥和证书管理实用程序可以创建PKCS12密钥库。

请参阅在Java平台,标准版安全开发人员指南中创建密钥库,和在Java平台,标准版工具参考中keytool

JEP 287:SHA-3哈希算法

支持NIST FIPS 202中指定的SHA-3加密散列函数。

java.security.MessageDigestAPI 支持以下附加标准算法:SHA3-224,SHA3-256,SHA3-384和SHA3-512。

以下提供商支持SHA-3算法增强功能:

  • SUN提供商:SHA3-224,SHA3-256,SHA3-384和SHA3-512

  • OracleUcrypto提供商:Solaris 12.0支持的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中,包括模块感知和自定义运行时创建。

利用该jlink工具创建更小的包。

创建程序只能使用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

确认一些小的变化:

  • 允许@SafeVargs私有化实例方法。

  • 允许有效地将最终变量用作try-with-resources语句中的资源。

  • 如果推断类型的参数类型是可表示的,则允许具有匿名类的diamond 。

  • 完成从Java SE 8开始的,从合法的标识符名称集合中,删除下划线。

  • 添加对私有接口方法的支持。

请参阅在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平台,标准版工具参考中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中的-Xloggc java选项。

JEP 214:删除JDK 8中不推荐使用的GC组合

删除在JDK 8中不推荐使用的垃圾收集器(GC)组合。

这意味着以下GC组合不再存在:

  • DefNew + CMS

  • ParNew + SerialOld

  • 增量CMS

同时标记扫描(CMS)的“前景”模式也已被删除。以下命令行标志已被删除:

  • -Xincgc
  • -XX:+CMSIncrementalMode
  • -XX:+UseCMSCompactAtFullCollection
  • -XX:+CMSFullGCsBeforeCompaction
  • -XX:+UseCMSCollectionPassing

命令行标志-XX:+UseParNewGC不再有效果。ParNew只能与CMS一起使用,CMS需要ParNew。因此,该-XX:+UseParNewGC标志已被弃用,将来可能会被删除。

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)垃圾回收器。使用该-XX:+UseConcMarkSweepGC选项在命令行上请求时发出警告消息。垃圾回收(G1)垃圾收集器旨在替代大多数CMS使用。

JDK 9中核心库的新功能

特征

描述

JEP 102:进程API更新

改进用于控制和管理操作系统进程的API。

所述ProcessHandle类提供的过程的本机过程ID,自变量,命令,开始时间,累积CPU时间,用户,父进程,和后代。该类还可以监视进程的活动并销毁进程。使用ProcessHandle.onExit方法,CompletableFuture类的异步机制可以在进程退出时执行一个操作。

请参阅的Java平台,标准版Java的核心库开发指南中进程APIjava.lang.Processjava.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 ReferenceCompactStrings中的java命令选项。

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:集合的便利工厂方法

使用少量元素创建集合和映射的实例更容易。对于ListSetMap接口,新的静态工厂方法使得创建这些集合的不可变实例变得更为简单。

例如:

Set alphabet = Set.of(“a”,“b”,“c”);

请参阅在Java平台“标准版Java核心库开发人员指南”中创建不可变的列表,集合和映射。有关API文档,请参阅不可变静态工厂方法不可变Map静态工厂方法不可变列表静态工厂方法

JEP 274:增强方法句柄

增强java.lang.invoke包的MethodHandle,MethodHandles和MethodHandles.Lookup类,以简化常见的用例并实现更好的编译器优化。

补充包括:

  • 在java.lang.invoke包中的MethodHandles类中,为循环和try / finally块提供新的MethodHandle组合器。

  • 使用新的MethodHandle组合器来增强MethodHandle和MethodHandles类的参数处理。

  • 在MethodHandles.Lookup类中实现接口方法和可选的超类构造函数的新的查找方式。

JEP 277:增强Deprecated

修改@Deprecated注释,以提供有关规范中API的状态和预期配置的更好信息。增加了两个新元素:

  • @Deprecated(forRemoval = true)表示将在Java SE平台的将来版本中删除该API。

  • @Deprecated(since =“version”)包含Java SE版本字符串,用于指示何时不推荐使用API​​元素,这些字符串在Java SE 9及更高版本中已被弃用。

例如:@Deprecated(since =“9”,forRemoval = true)

@Deprecated注解在核心平台中已更新。

您可以使用新工具jdeprscan来扫描类库(JAR文件),以使用已弃用的JDK API元素。

请参阅在Java平台,标准版Java的核心库开发人员指南中增强弃用

请参阅在Java平台,标准版工具参考中jdperscan

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 引入的许多新功能。实施的功能包括:

  • 模板字符串
  • letconst和块范围
  • 迭代器和for..of循环
  • Map,Set,WeakMap和WeakSet
  • 符号
  • 二进制和八进制文本

JDK 9中客户端技术的新功能

这些是JDK 9中的客户端技术增强功能。

特征

描述

JEP 251:多分辨率图像

使一组具有不同分辨率的图像被封装到单个多分辨率图像中。这对应用程序来说适用于在运行时分辨率可能会从大约96dpi到300dpi变化的显示设备。

接口java.awt.image.MultiResolutionImage将一组具有不同分辨率的图像封装到单个多分辨率图像中,使应用程序能够轻松地操作和显示具有分辨率变体的图像。

JEP 253:准备用于模块化的JavaFX UI控件和CSS API

为JavaFX UI控件和CSS功能提供公共API,以前只能通过内部软件包提供,但由于模块化而无法访问。

新包javafx.scene.control.skin由一组类提供每个UI控件的皮肤(或外观)的默认实现。

新类CssParser是一个返回一个Stylesheet对象的CSS解析器,它可以更好地控制应用程序的CSS样式。它是CSS API(javafx.css包)的一部分。CSS API包括新的支持类,包括解析器使用的一组标准转换器; 参阅javafx.css.converter

JEP 256:BeanInfo注释

@beaninfo使用注释类型JavaBeanBeanPropertySwingContainer替换Javadoc标记。

这些注释类型在运行时在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添加其他方法,使您能够与桌面交互,包括以下内容:

  • 显示自定义关于和首选项窗口。

  • 处理打开或打印文件列表的请求。

  • 处理打开URL的请求。

  • 打开本机帮助查看器应用程序。

  • 设置默认菜单栏。

  • 启用或禁用应用程序突然终止。

这些新方法替代了包含在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.gtk.version。此系统属性的值可能为2,2.2或3.您必须在应用程序加载GTK +之前设置此属性,并且不得与较早由另一个工具包加载的GTK +版本冲突。

JDK 9中的国际化新进展

这些是JDK 9中的国际化增强。

特征

描述

JEP 267:Unicode 8.0

支持Unicode 8.0。JDK 8支持的Unicode 6.2。

Unicode的6.37.0和8.0标准相结合引入10555个字符,29个脚本,和42个块,所有这些在JDK 9都被支持。

JEP 252:默认情况下启用CLDR区域设置数据

使用首先在JDK 8中添加的,公共区域设置数据存储库(CLDR),基于XML的区域设置数据,作为JDK 9中的默认语言环境数据。在以前的版本中,默认值为JRE。

要启用与JDK 8兼容的行为,请将系统属性java.locale.providers的值在CLDR之前设置为COMPAT

请参阅在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

访问Oracle支持

购买支持的Oracle客户可以通过My Oracle Support获得电子支持。有关信息,请访问http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info或访问http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs

翻译时间仓促,所以先使用机器翻译,以便能大概明白其中重要意思,希望能对大家了解JDK9新特性有所帮助,各个翻译细节正在努力完善中,大家有什么好的翻译意见可以留言告知我,我会尽力修改完善, 原文链接https://docs.oracle.com/javase/9/whatsnew/toc.htm#JSNEW-GUID-825576B5-203C-4C8D-85E5-FFDA4CA0B346

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这