关键时刻, 第一时间送达!
目前 Oracle 已经发布了 Java Development Kit 10, 下个版本 JDK 11 也即将发布. 本文介绍 Java 11 的新功能.
根据 Oracle 新出台的每 6 个月发布一次 Java SE 的节奏, Java 11 将于 2018 年 9 月发布, 迄今为止 Oracle 已经宣布了好几个新功能.
此外, Java 11 还将删除一些功能, 其中包括删除 CORBA 和 Java EE(最近更名为 Jakarta EE)模块, 以及删除 JavaFX.
与 JDK 10 不同, JDK 11 将提供长期支持, 还将作为 Java 平台的参考实现以及标准版(Java SE)11.Oracle 直到 2023 年 9 月都会为 JDK 11 提供一级支持, 而补丁和安全警告等扩展支持将延续到 2026 年. 新的长期支持版本每三年发布一次, 根据后续的发行计划, JDK 17 将于 2021 年发布.
Java 11 JDK 中已计划的新功能
目前来看, JDK 11 已有九个已经确认的新功能, 而且还有更多新功能仍在考虑之中. 计划的新功能包括:
HTTP 客户端(标准), 这个功能于 JDK 9 中引入并在 JDK 10 中得到了更新, 现在终于转正了. 该 API 通过 CompleteableFutures 提供非阻塞请求和响应语义, 可以联合使用以触发相应的动作. 自从 JDK 9 和 10 中引入该功能后, JDK 11 完全重写了该功能, 现在其实现完全是异步的. RX Flow 的概念也得到了实现, 这样就无需为了支持 HTTP/2 而创造许多概念了. 现在, 在用户层请求发布者和响应发布者与底层套接字之间追踪数据流更容易了. 这降低了复杂性, 并最大程度上提高了 HTTP/1 和 HTTP/2 之间的重用的可能性.
Epsilon 垃圾回收器, 被称为 "no-op" 回收器, 它仅负责内存分配, 却没有实现任何实际的内存回收机制. Epsilon 回收器可以用于性能测试, 内存压力测试和虚拟机接口. 它还可以用于短生命周期的任务.
lambda 参数的局部变量语法, 可以消除隐含类型表达式中正式参数定义的语法与局部变量定义语法的不一致. 这样就能在隐含类型的 lambda 表达式中定义正式参数时使用 var 了.
Java 的类文件格式将被扩展, 以支持新的常量池, CONSTANT_Dynamic. 其目标是降低开发新形式的可实现类文件约束带来的成本和干扰.
采用 Curve25519 和 Curve448 加密的密钥交换比现有的 Diffie-Hellman 椭圆曲线密钥交换方式更有效, 更安全. 根据 IETF 的资料, Curve25519 和 Curve448 两种椭圆曲线采用常量时间的实现方式, 以及不会发生异常的数乘实现, 能更好地抵抗各种旁路攻击, 包括时序攻击, 缓存攻击等. 该提案的目标是为密钥交换方法提供一个 API 和实现, 同时开发一个平台无关, 纯 Java 的的实现. 由于该提案采用了复杂且精密的模算数, 因此还是有风险的.
飞行记录仪 (Flight Recorder) 将提供低开销的数据收集框架, 用来调试 Java 应用程序和 HotSpot JVM. 飞行记录仪是 Oracle 的商业版 JDK 的功能, 但在 JDK 11 中, 其代码将移动到公开代码库中, 这样所有人都能使用该功能了. Iclouded 将作为 API, 以事件的形式产生或消耗数据, 同时提供缓存机制, 二进制数据工具, 同时支持配置和事件过滤. 该提案还提议为 OS,HotSpot 和 JDK 库提供事件.
更新 platform API 以支持 Unicode 版本 10.0, 从而使 Java 跟上潮流. 预计以下的类将支持:
lang 包中的 Character 和 String
awt.font 包中的 NumericShaper
text 包中的 Bidi,BreakIterator 和 Normalizer
实现 ChaCha20 和 Poly1305 加密算法. ChaCha20 是种相对较新的流加密算法, 能代替旧的, 不安全的 R4 流加密. ChaCha20 将与 Poly1305 认证算法配对使用. ChaCha20 和 ChaCha20-Poly1305 加密实现将通过 crypto.CipherSpi API 于 SunJCE(Java 加密扩展)中提供.
增强 Java 启动器, 使之能够运行单一文件的 Java 源代码, 使得应用程序可以直接从源代码运行. 单文件程序常见于小型工具, 或开发者初学 Java 时使用. 而且, 单一源代码文件有可能会编译成多个类文件, 这会增加打包开销. 由于这些原因, 在运行程序之前进行编译, 已成为了不必要的步骤.
Java JDK 11 仍在开发中的新功能
Java 11 的创建者们还在考虑几个对 JDK 11 的变更或新功能的提案:
给 Java 添加 raw 字符串字面值. 这样可以更容易地以人类可阅读的形式书写字符序列, 而无需特殊的 Java 标记. 这样也能更容易地将非 Java 语法的字符串提供给 Java 使用, 还能支持多行字符串, 而无需使用特殊的标记.
扩展 switch 语句, 使之能作为语句或表达式使用. 这样还能改进 switch 处理 null 值的方式. 这些改动可以简化编程, 同时为 switch 支持模式匹配做准备.
嵌套的访问控制, 对应于 Java 当前的嵌套类型. 嵌套可以让逻辑上属于同一代码实体但被编译到不同的类文件中的类互相访问对方的私有成员, 而无需让编译器插入扩大访问权限的方法.
JDK 11 删除的功能
Java EE 和 CORBA 模块从 Java SE9 就成了不推荐使用(deprecated), 并计划在未来的版本中删除. 这个未来版本就是 JDK 11.
Java SE 6 于 2006 年 12 越发布, 它为 Java EE 平台提供了整套的 web 服务技术栈: JAX-WS(Java API for XML-based Web Services),JAXB(Java Architecture for XML Binding),JAF(JavaBeans Activation Framework), 以及 Common Annotations for Java. 这些年来, Java EE 版本在不断进化, 这给 Java SE 造成了许多麻烦, 例如加入与 Java SE 无关的技术, 以及同时维护两个 Java 版本的困难变得更大. 由于独立的 Java EE 版本由第三方网站提供, Oracle 说 Java SE 或 JDK 中已经没有必要提供 Java EE 了.
当然, 一些依赖于 JDK 中的 Java EE API 及工具的应用程序将无法编译或运行. 将 JDK 6,7 或 8 移植到新版本时将会产生二进制不兼容和源代码不兼容. Oracle 说, 受到这些影响的开发者可以部署相应的 Java EE 版本.
CORBA 来自于二十世纪九十年代, Oracle 说, 现在用 CORBA 开发现代 Java 应用程序已经没有意义了, 维护 CORBA 的成本已经超过了保留它带来的好处.
但是删除 CORBA 将使得那些依赖于 JDK 提供部分 CORBA API 的 CORBA 实现无法运行. 目前还没有第三方 CORBA 版本, 也不确定是否会有第三方愿意接手 CORBA API 的维护工作.
JavaFX 已经被移除, 因此已经与 Java JDK 每年两次的更新无关.
来源: https://www.cnblogs.com/Tanyboye/p/9093909.html