JDK11你必须了解的新特性

Epsilon: A No-Op Garbage Collector(Epsilon — 无操作的垃圾回收器)

Epsilon只会处理内存分配但不实现任何实际内存回收机制的GC,一旦堆内存用完,JVM就会退出。

它的使用场景:

    性能测试。由于它没有GC,所以可以在压测时过屏蔽GC对程序性能的影响。也可以用它来对不同的实际会进行GC的回收器进行性能差异分析。 内存压力测试。比如测试用例应该分配不超过1 GB的内存,可以使用-Xmx1g配置-XX:+UseEpsilonGC,如果违反了该约束,则会heap dump并崩溃。 非常短的JOB任务。这个特性在Serverless,AWS Lambda,这种场景会很有效。 要求极低延迟的任务。由于GC操作带来的暂停,对于这样的应用来说是不能接受的。通过Epsilon可以避免GC操作带来的暂停。这相当于用内存换取执行时间。

HTTP Client

新的HTTP Client在JDK9中孵化,经过两个版本的优化后,在JDK11中正式转正。


Local-Variable Syntax for Lambda Parameters

允许在声明隐式类型lambda表达式的形参时使用var。

隐式类型lambda表达式:

(x, y) -> x.process(y)

JDK 10让隐式类型变量可用于本地变量:

var x = new Foo();
for (var x : xs) { ... }
try (var x = ...) { ... } catch ...

为了和本地变量保持一致,允许var作为隐式类型lambda表达式的形参:

(var x, var y) -> x.process(y)

一致性的一个好处是,修饰符,尤其是注释,可以应用于局部变量和lambda形式,而不会失去简洁。

@Nonnull var x = new Foo(); 
(@Nonnull var x, @Nullable var y) -> x.process(y)

Flight Recorder(飞行记录器)

它是一个低开销的数据收集框架,可用于在生产环境中分析Java应用和JVM运行状况及性能问题。

故障诊断、监控和profile收集分析是开发周期中不可缺少的一部分。但是很多问题都只会在高负载的生产环境中产生。此时就需要一个可以在生产环境中使用的监控工具,JFR由此而生。

JFR会从应用程序中记录运行时事件,同时也会记录JVM和OS的。记录的结果会存在一个单独的文件中,此文件可供开发工程师分析bug和性能问题。同时JDK中也提供了可视化工具来分析这类文件。

JFR在JDK中相关的模块:jdk.jfr,jdk.management.jfr

JFR有如下两种启动方式

    增加JVM参数:-XX:StartFlightRecording 通过jcmd工具使用,用例如下:
  1. jcmd JFR.start :开始记录。 jcmd JFR.dump filename=recording.jfr 。将记录文件dump下来,通过jmc来分析。
  2. jcmd JFR.stop :停止。

最初的Java飞行记录器(JFR)和Java任务控制(JMC)工具是Oracle在2008年收购BEA系统时获得的,之前这个功能都是商业化的,在JDK11中开源了出来。


ZGC: A Scalable Low-Latency Garbage Collector (Experimental)(ZGC:可伸缩低延迟垃圾回收器)

现代系统中可用内存不断增长, 用户和程序员希望JVM能够以高效的方式充分利用这些内存,并且无需长时间的GC暂停时间。 ZGC一个并发,基于region,压缩型的垃圾回收器,只有root扫描阶段会STW,因此GC停顿时间不会随着堆的增长和存活对象的增长而变长。

ZGC特性:

    GC暂停时间不会超过10ms; 即能处理几百兆小堆,也能处理几个T的大堆(OMG); 和G1相比,应用吞吐能力不会下降超过15%; 为未来的GC功能和利用colord指针以及Load barriers优化奠定基础; 初始只支持64位系统;

ZGC在JDK11还处于实验阶段,所以需要通过JVM参数UnlockExperimentalVMOptions 来解锁这个特性。

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

使用ZGC除了带来了高效的垃圾回收功能外,也避免了垃圾回收器一堆的配置参数需要配置和调优。

完整特性

181: 309: 315: 318: 320: 321: 323: 324: 327: 328: 329: 330: 331: 332: 333: 335: 336:

经验分享 程序员 微信小程序 职场和发展