[翻译]JDK8有什么新东西?
翻译官方文档,译者精力有限,忽略部分划删除线。 译者:坤谷(@JianhaoMo) ,校对:井桐(@张同宝)
Java SE 8是一个Java主要特性的发布版本。本文总结了在Java SE 8、JDK 8以及Oracle实现的Java SE 8中的新特性和增强的功能。点击下面各个组件的名称可以获取该组件增强的更详细说明。
-
- Lambda表达式(Lambda Expressions)作为一种新的语言特性引入到这个版本中。它们允许我们将功能作为方法的参数传递,或者把代码看成是数据。Lambda表达式能够让你更加简洁的表达单个方法的接口(函数式接口)的实例。
- 方法引用(Method references)为有名称的方法提供易于阅读的lambda表达式。
- 默认方法(Default methods)能够使新功能被添加到库的接口中,并确保与旧版本中为这些接口写的代码二进制兼容。
- 重复注解(Repeating Annotations)提供对于同样的声明和类型使用时可以多次使用相同的注解类型的能力。
- 类型注解(Type Annotations)可以在一个类型的任意使用位置使用注解,而不局限于在类型声明处使用。配合可插拔的类型系统(pluggable type system)使用,类型注解可以提高代码的类型检查能力。
- 改进类型推断
- 方法参数反射
-
- 新的
java.util.stream
包中的类为集合类的元素提供了流式API来支持函数式的操作。该流式API被集成到集合API中,它使得集合类可以进行(串行或并行map-reduce)批量操作。 - 改进HashMaps键冲突的性能
- 新的
紧凑的配置,提供了Java SE平台的预定义子集,使得小型设备的应用程序可以不需要再在整个平台上部署运行。-
客户端TLS 1.2默认启用- 新的
AccessController.doPrivileged
变量使代码对其权限的子集进行断言,而避免遍历整个方法栈来检查其他权限 - 更强大的基于密码的加密算法
- JSSE服务器支持SSL/TLS服务器名称指示(SNI)扩展
- 支持AEAD算法:增强了SunJCE provider,支持AES/GCM/NoPadding cipher实现以及GCM算法参数。增强SunJSSE provider,支持基于cipher suites的AEAD模式。看考甲骨文提供的文档,JEP 115。
- 增强KeyStore,包括新的Domain KeyStore类型
java.security.DomainLoadStoreParameter
,以及keytool工具新的命令选项-importpassword
。 - SHA-224消息摘要
- NSA Suite B Cryptography增强
- 更好地支持高熵随机数生成
- 新的
java.security.cert.PKIXRevocationChecker
类用于配置X.509证书吊销检查。 Windows 64位PKCS11。- 为Kerberos 5 Replay Caching 新增rcache类型。
- 支持Kerberos 5协议转换和约束委派。
- 默认情况下禁用Kerberos 5弱加密类型。
- 对GSS-API / Kerberos 5提供未绑定的SASL。
- SASL服务支持多主机名。
Mac OS X支持JNI桥接原生JGSS。- SunJSSE provider 支持更强的短暂DH密钥。
- JSSE支持服务器端cipher suites的定制。
JavaFX 略-
jjs
命令用于启动Nashorn引擎。java
命令可以启动JavaFX应用程序。- 重新设计
java
man页。 jdeps
命令行工具用于分析类文件。- Java管理扩展(JMX)给诊断命令提供远程访问。
jarsigner
工具增加请求从Time Stamping Authority(TSA)已签名的时间戳的选项。- javac工具
javac
命令的-parameters
选项可以用来存储形参名称并可以用反射API来获取形参名称。javac
命令现在能正确地执行在Java语言规范(JLS)第15.21关于相等运算符的类型规则。javac
工具支持检查javadoc
注释的内容。检查可能导致javadoc
生成的文档的各种问题,如无效的HTML或可访问性问题。 该功能是通过启用新的-Xdoclint
选项来执行。 欲了解更多信息,请参阅运行”javac -X
“的输出。这个功能也可以在javadoc
工具中使用,默认启用。javac
工具还提供根据需要生成native头文件的能力。 这免去了构建流程中单独运行javah工具的必要。javac
通过使用新的-h
选项来开启,该选项用于指定头文件写入指定的目录。 native方法和标注了新注释java.lang.annotation.Native的常量字段,都将生成头文件。- Javadoc工具
javadoc
工具支持新DocTree
API,使你能够以抽象语法树的方式遍历Javadoc注释。javadoc
工具支持新的Javadoc访问API,使你能够直接从Java应用程序调用Javadoc工具,而不执行新的进程。 请参阅的javadoc新特性了解更多信息。javadoc
工具现在已经支持检查javadoc
注释的内容,检查可能生成导致各种问题的注释,如无效的HTML或可访问性问题。 该功能是默认启用,并且还可以通过新的-Xdoclint
选项控制。 欲了解更多信息,请参阅”javadoc -X
“的输出。 这个功能也可以在javac工具提供,虽然它不是默认启用的。
-
- Unicode的改进,包括对Unicode 6.2.0支持。
- 采用Unicode的CLDR数据和java.locale.providers系统属性。
- 新的Calendar和LocaleAPIs。
- 能够扩展安装自定义资源包。
-
对于沙盒applets和Java Web Start应用程序,URLPermission现在用于允许连接回他们所启动的服务器,SocketPermission权限不再授予。所有安全级别的主JAR文件的manifest必须包含权限属性。
-
- 一组新的软件包提供了一个全面的日期-时间模式。
-
- Nashorn JavaScript引擎
-
- Pack200支持由JSR 292引入的常量池项和新的字节码。
- 支持由JSR-292,JSR-308和JSR-335引入的JDK8类文件的变化。
-
Solaris新增基于Solaris事件端口机制的SelectorProvider
,使用时,系统属性java.nio.channels.spi.Selector
设置为值sun.nio.ch.EventPortSelectorProvider
。- 减少
<JDK_HOME>/jre/lib/charsets.jar
文件的大小。 - 优化
java.lang.String(byte[], *)
构造函数和java.lang.String.getBytes()
方法的性能。
-
- 并行数组排序
- 标准Base64编码器和解码器
- 无符号运算支持
-
- 删除JDBC-ODBC桥。
- JDBC 4.2引入了新功能。
-
Java DB
- JDK 8包含Java DB 10.10。
-
- 添加类
java.net.URLPermission
。 - 如果启用了security manager,类
java.net.HttpURLConnection
请求打开一个连接需要获得许可。
- 添加类
-
java.util.concurrent
包添加了相关类和接口。java.util.concurrent.ConcurrentHashMap
类添加了方法,用于支持基于新的流设施和lambda表达式聚合操作。java.util.concurrent.atomic
包添加了类,用于支持可扩展的、可更新的变量。java.util.concurrent.ForkJoinPool
类添加了方法,用于支持公共线程池。- 添加了
java.util.concurrent.locks.StampedLock
类,提供了有三种模式的capability-based lock,用于控制读/写访问。
- Java的XML - JAXP
-
- 为使用Advanced Encryption Standard(AES)添加硬件相关的intrinsics。 可以通过
UseAES
和UseAESIntrinsics
两个flag使得Intel硬件上的基于硬件的AES intrinsics生效。 硬件必须是2010或更高版本的Westmere硬件。例如,要启用硬件AES,使用下面的选项:-XX:+ UseAES -XX:+ UseAESIntrinsics
要禁用硬件AES使用下面的选项:-XX:-UseAES -XX:-UseAESIntrinsics
- 去除PermGen。
- 对方法调用的字节码指令,支持Java编程语言的默认方法。
- 为使用Advanced Encryption Standard(AES)添加硬件相关的intrinsics。 可以通过
-
JDK 8包括JavaMission Control 5.3。
Written on December 9, 2015