// JDK9 --> JDK11
异步HTTP客户端
JDK9开始引入,JDK11中正式可用。
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("www.baidu.com")).build();
BodyHandler<String> ResponseBodyHandler = BodyHandlers.ofString();
// 同步
HttpResponse response = client.send(request, responseBodyHandler);
System.out.println(response.body());
// 异步
CompletableFuture<HttpResponse<String>> sendAsync = client.sendAsync(request, responseBodyHandler);
HttpResponse<String> response = sendAsync.get();
System.out.println(response.body());
JDK11移除内容
主要移除一些使用很少的功能,比如:
移除了Thread.destory() Thread.stop(Throwable)
移除了javafx openjdk
移除了java mission control
移除了xml有关的所有模块,仅留下java.xml.crypto jdk.xml.dom java.xml
…
PS: java都移除了javafx,学校老师还在上这门课 o(>﹏<)o
Unicode 10新增字符
新增了56个emoji表情符号、8518个字符,字符总数达到了136690,从而原来的两个字节已经无法处理。
lang包下新增了处理字符的类CharacterDateXX,以及String类中原有的与CodePoints有关的方法,用来处理超过大小的字符。
Epsilon GC
JDK中对这个垃圾收集器的描述是:处理内存分配但不实现任何实际内存回收机制的gc,一旦堆内存用完JVM就退出
指出如果调用System.gc()也是没有效果的
-XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
# 效果等价于
-XX:+DisableExplicitGC
主要用途:
- 性能测试,过滤掉由于GC引起的性能假象
- 内存压力测试
- 运行所需时间非常短的任务,GC是在浪费时间空间
ZGC
特点:伸缩低延迟(Scalable Low-Latency),即能处理几百兆小堆,也能处理几T大堆。只有root扫描阶段会STW,GC停顿时间不会随着堆增长和存活对象增长而增长。
设计目标:支持TB级别的内存管理,暂停时间<10ms,对程序吞吐量影响<15%
本质:ZGC是一个并发的,基于区(region)的压缩型垃圾收集器,它用42位描述内存地址编号,从而支持了TB级别的内存管理,用剩下的22位可以扩展实现机制,例如多层堆(热对象与冷对象分层),压缩堆等
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
G1增强
JDK11实现G1的并行full GC,快速的CardTable扫描,更方便的GC配置和调优等
完全支持linux容器
在JDK9之前JVM无法识别容器使用标志设置的内存限制和CPU限制,导致应用性能下降。(JDK9:什么Σ(⊙▽⊙"!,我竟然在docker中运行)
JVM现在可以识别容器控制组(cgroups)设置的约束