[翻译]JDK8有什么新东西?

简介:

翻译官方文档,删除部分可忽略。
译者:坤谷 ,校对:井桐

Java SE 8是一个Java主要特性的发布版本。本文总结了在Java SE 8、JDK 8以及Oracle实现的Java SE 8中的新特性和增强的功能。点击下面各个组件的名称可以获取该组件增强的更详细说明。

  • Java编程语言

    • Lambda表达式(Lambda Expressions)作为一种新的语言特性引入到这个版本中。它们允许我们将功能作为方法的参数传递,或者把代码看成是数据。Lambda表达式能够让你更加简洁的表达单个方法的接口(函数式接口)的实例。
    • 方法引用(Method references)为有名称的方法提供易于阅读的lambda表达式。
    • 默认方法(Default methods)能够使新功能被添加到库的接口中,并确保与旧版本中为这些接口写的代码二进制兼容。
    • 重复注解(Repeating Annotations)提供对于同样的声明和类型使用时可以多次使用相同的注解类型的能力。
    • 类型注解(Type Annotations)可以在一个类型的任意使用位置使用注解,而不局限于在类型声明处使用。配合可插拔的类型系统(pluggable type system)使用,类型注解可以提高代码的类型检查能力。
    • 改进类型推断
    • 方法参数反射
  • 集合类

    • 新的 java.util.stream包中的类为集合类的元素提供了流式API来支持函数式的操作。该流式API被集成到集合API中,它使得集合类可以进行(串行或并行map-reduce)批量操作。
    • 改进Has​​hMaps键冲突的性能
  • 紧凑的配置,提供了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工具支持新DocTreeAPI,使你能够以抽象语法树的方式遍历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必须包含权限属性。
  • 日期-时间包

    • 一组新的软件包提供了一个全面的日期-时间模式。
  • 脚本

  • Pack200

    • Pack200支持由JSR 292引入的常量池项和新的字节码。
    • 支持由JSR-292,JSR-308和JSR-335引入的JDK8类文件的变化。
  • IO和NIO

    • 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()方法的性能。
  • java.lang和java.util包

    • 并行数组排序
    • 标准Base64编码器和解码器
    • 无符号运算支持
  • JDBC

    • 删除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
  • Hotsport JVM

    • 为使用Advanced Encryption Standard(AES)添加硬件相关的intrinsics。 可以通过UseAESUseAESIntrinsics两个flag使得Intel硬件上的基于硬件的AES intrinsics生效。 硬件必须是2010或更高版本的Westmere硬件。例如,要启用硬件AES,使用下面的选项:
  -XX:+ UseAES -XX:+ UseAESIntrinsics

要禁用硬件AES使用下面的选项:

  -XX:-UseAES -XX:-UseAESIntrinsics
  • 去除PermGen。
  • 对方法调用的字节码指令,支持Java编程语言的默认方法。
目录
相关文章
|
26天前
|
开发框架 Oracle Java
【编程基础知识】《Java 世界探秘:JRE、JDK 与 JDK 版本全解析》
JRE(Java Runtime Environment)是运行Java程序所需的环境,包含JVM和Java核心类库,适合普通用户使用。JDK(Java Development Kit)则是Java开发工具包,不仅包含JRE,还提供了编译器、调试器等开发工具,适用于开发者。两者的主要区别在于JDK用于开发,而JRE仅用于运行Java程序。JDK各版本不断引入新特性,如Java 8中的Lambda表达式和默认方法等。环境配置方面,Windows和Linux系统都有详细的步骤,确保Java程序能够顺利编译和运行。
30 1
|
3月前
|
Oracle Java 关系型数据库
【Java 第二篇章】准备一下JDK环境
【8月更文挑战第1天】 在Windows 10中配置Java环境变量需先安装JDK,然后设置`JAVA_HOME`指向JDK目录,并更新`Path`变量加入`%JAVA_HOME%\bin`,以便全局访问Java命令。最后通过命令提示符输入`java -version`和`javac -version`验证配置是否成功。
24 1
|
6月前
|
算法 Oracle Java
一文详解|从JDK8飞升到JDK17,再到未来的JDK21
本文深入浅出地解析了从JDK8到JDK17版本升级的新特性,并展望后续将会更新的JDK21.
|
6月前
|
XML Java 编译器
JDK1.5,1.6,1.7,1.8,1.9,1.10,1.11的新特性整理
JDK1.5,1.6,1.7,1.8,1.9,1.10,1.11的新特性整理
570 0
|
Java 编译器 API
谈一谈|JDK、JRE和JVM的解释以及联系和区别
谈一谈|JDK、JRE和JVM的解释以及联系和区别
157 1
|
Oracle Java 关系型数据库
java核心学习-jdk的安装教程
java核心学习-jdk的安装教程
89 0
java核心学习-jdk的安装教程
|
存储 SQL 安全
浩哥带你学习JDK1.1源码——第2天
JDK1.1源码阅读第二天,带你阅读源码文档那些事和源码的结构。
119 0
浩哥带你学习JDK1.1源码——第2天
|
Java
浩哥带你学习JDK1.1源码——第1天
1996年1月,第一个JDK1.0诞生,从此Java开疆拓土,终成一个参与、制定新世界不可分割的伟大帝国。而远在1990年代初它的名字叫Oak,本想在电视机、电话、闹钟、烤面包机等家用电器的智能控制上大展拳手(这就是为啥Java支持跨平台了),但由于当时的市场需求没有预期的高,Sun公司于是就放弃了该计划。1992年 Joe Palrang创作出来了Java的吉祥物:Duke。随着互联网的发展,1995年5月 Oak正式改名为Java(看来起个好名字真的很重要),混的那叫一个风生水起。这一切还得靠1994年6月詹姆斯·高斯林等人的头脑风暴将技术应用于新兴的万维网的决定。
199 0
浩哥带你学习JDK1.1源码——第1天
|
iOS开发
[OC Runtime编程指南_翻译]二、运行时版本和平台
[OC Runtime编程指南_翻译]二、运行时版本和平台
148 0
|
存储 SQL 自然语言处理
JDK 1.8学习
JDK 1.8介绍
149 0