Java11新特性概述
Java 11已于2018年9月25日正式发布,Java9和Java10被称之为功能性版本,与这两者不同Java11仅提供长期支持服务,还被作为Java平台的默认支持版本,并且技术支持到2023年。
基于嵌套的访问控制
Java11中引入2个新的属性,一个叫做NestMembers的属性,用于标识其它已知静态nest成员;另外一个是每个nest成员都包含的NestHost属性,用于标识它的nest宿主类。
HttpClient升级
Java11对Java9中引入并在Java10中优化的 Http Client APi进行了标准化,现在完全支持异步阻塞。
Epsilon 低开销垃圾回收器
Epsilon垃圾回收期的目标是开发一个控制内存分配,但是不执行任何实际的垃圾回收工作。它提供一个完全消极的GC实现,分配有限的内存资源,最大限度的降低内存占用和内存吞吐延迟时间。
简化启动单个源代码文件的方法
Java11版本中最令人兴奋的功能之一是增强Java启动器,使之能够运行单一文件的Java源码。源代码在内存中编译,然后由解释器执行
用于Lambda参数的局部变量表达语法
在Lambda表达式中使用局部变量类型推荐是Java11引入的语言特性。编译器根据分配给变量的值推断出类型
低开销的Heap Profiling
Java11中提供一种低开小的Java堆分配采样方法,能够得到堆分配的Java对象信息,并且能够通过JVMTI访问堆信息。
支持TLS 1.3协议
Java11 中包含了传输层安全性的实现,替换了之前版本中包含的TLS,包括TLS1.2
升级到TLS1.3之前需要考虑如下兼容性问题:
TLS 1.3 使用半关闭策略,而 TLS 1.2 以及之前版本使用双工关闭策略,对于依赖于双工关闭策略的应用程序,升级到 TLS 1.3 时可能存在兼容性问题。
TLS 1.3 使用预定义的签名算法进行证书身份验证,但实际场景中应用程序可能会使用不被支持的签名算法。
TLS 1.3 再支持 DSA 签名算法,如果在服务器端配置为仅使用 DSA 证书,则无法升级到 TLS 1.3。
TLS 1.3 支持的加密套件与 TLS 1.2 和早期版本不同,若应用程序硬编码了加密算法单元,则在升级的过程中需要修改相应代码才能升级使用 TLS 1.3。
TLS 1.3 版本的 session 用行为及秘钥更新行为与 1.2 及之前的版本不同,若应用依赖于 TLS 协议的握手过程细节,则需要注意
ZGC:可伸缩低延迟垃圾收集器
ZGC是Java11 最瞩目的特性没有之一。ZGC是一个可伸缩的、低延迟的垃圾收集器,主要为了满足如下目标设计:
GC停顿时间不超过10ms
能处理几百MB的小堆,也能处理几个TB的大堆
应用吞吐能力不会下降超过15%
方便在此基础上引入新的GC 和利用colord
针以及Load barriers 优化奠定基础
当前只支持Linux/x64位平台
开启ZGC了垃圾回收期,目前ZGC正处于实验阶段,所以暂时只支持Linux/x64位平台
-XX:+ UnlockExperimentalVMOptions -XX:+ UseZGC -Xmx10g
飞行记录器
飞行记录器之前是商业版本JDK的一项分析工具,但在Java11中,其代码被包含到公开代码库中,这样所有人都能使用该功能了。作用主要对应用程序和JVM进行故障检查、分析。数据源来自于应用程序、jvm以及OS。
启动飞行记录器参数: -XX:StartFlightRecording