推荐链接:
https://javaguide.cn/java/new-features/java11.html
HTTP Client 标准化
Java 9/10 → HttpClient 还是孵化 API
Java 11 → HttpClient 正式标准化(JEP 321),支持 HTTP/1.1 + HTTP/2,同步/异步 API 统一,极大改善了原有 HttpURLConnection 的痛点
实用性:业务开发可以直接用,尤其在轻量级项目;但在复杂场景,Apache HttpClient/OkHttp 仍然更合适。
同步 GET 请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse;
public class HttpClientSyncExample { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://httpbin.org/get")) .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode()); System.out.println(response.body()); } }
|
异步 GET 请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.util.concurrent.CompletableFuture;
public class HttpClientAsyncExample { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://httpbin.org/get")) .build();
CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofString());
future.thenApply(HttpResponse::body) .thenAccept(System.out::println);
future.join(); } }
|
POST JSON 请求
1 2 3 4 5 6 7 8
| HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://httpbin.org/post")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString("{\"name\":\"Ablaze\"}")) .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body());
|
String 增强
Java 11 String
新方法:
isBlank()
strip()
/ stripLeading()
/ stripTrailing()
:分别去除 两端、前导、后缀 的空白字符(支持 Unicode 空白,比 trim()
更强大)。
repeat(int)
:重复当前字符串 N 次。
lines()
:把字符串按行拆分为 Stream<String>
。
"A\nB\nC".lines().count();
:返回此流中元素的计数
"A\nB\nC".lines().collect(Collectors.toList());
:返回由行终止符分隔的字符串集合。
ZGC(可伸缩低延迟垃圾收集器)
ZGC 即 Z Garbage Collector,是一个可伸缩的、低延迟的垃圾收集器。
ZGC 主要为了满足如下目标进行设计:
- GC 停顿时间不超过 10ms
- 既能处理几百 MB 的小堆,也能处理几个 TB 的大堆
- 应用吞吐能力不会下降超过 15%(与 G1 回收算法相比)
- 方便在此基础上引入新的 GC 特性和利用 colored 针以及 Load barriers 优化奠定基础
- 当前只支持 Linux/x64 位平台
ZGC 目前 处在实验阶段,只支持 Linux/x64 平台。
与 CMS 中的 ParNew 和 G1 类似,ZGC 也采用标记-复制算法,不过 ZGC 对该算法做了重大改进。
在 ZGC 中出现 Stop The World 的情况会更少!