JDK 11 LTS 版本重大特性解析
· 阅读需 4 分钟
Java 11 是继 JDK 8 之后的又一个长期支持版本(LTS),带来了许多重要的改进。
1. HTTP Client API(标准化)
HTTP Client API 在 JDK 11 中正式成为标准特性:
// 创建 HTTP 客户端
var client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_2)
.connectTimeout(Duration.ofSeconds(10))
.build();
// 构建请求
var request = HttpRequest.newBuilder()
.uri(URI.create("https://api.example.com/data"))
.timeout(Duration.ofMinutes(1))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"name\":\"test\"}"))
.build();
// 发送请求
var response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
// 异步请求
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println);
主要特点:
- 支持 HTTP/2
- 异步请求支持
- WebSocket 支持
- 响应式流集成
2. Lambda 参数的局部变量语法
支持在 Lambda 表达式中使用 var:
// 使用 var 在 Lambda 中声明参数
(var x, var y) -> x + y
// 添加注解
(@NotNull var x, @Nullable var y) -> x + y
3. String 新方法
String 类增加了多个实用方法:
// 判断字符串是否为空白
" ".isBlank(); // true
" abc ".isBlank(); // false
// 去除首尾空白
" abc ".strip(); // "abc"
" abc ".stripLeading(); // "abc "
" abc ".stripTrailing(); // " abc"
// 重复字符串
"abc".repeat(3); // "abcabcabc"
// 行数统计
"a\nb\nc".lines().count(); // 3
4. 运行单文件源代码
直接运行 Java 源文件:
# 直接运行源文件
java HelloWorld.java
5. Flight Recorder
开源了 Flight Recorder:
// 启动 JFR 记录
jcmd <pid> JFR.start
// 配置 JFR
-XX:StartFlightRecording=duration=60s,filename=recording.jfr
6. 动态类文件常量
支持动态类文件常量:
// 示例:使用动态常量
public class DynamicConstantExample {
private static final String CONSTANT = "Hello";
private static final int NUMBER = 42;
public void example() {
// 使用动态常量
System.out.println(CONSTANT + NUMBER);
}
}
7. Epsilon 无操作垃圾收集器
引入了 Epsilon 垃圾收集器:
# 启用 Epsilon GC
java -XX:+UseEpsilonGC -jar application.jar
8. ZGC 实验性垃圾收集器
引入了实验性的 ZGC:
# 启用 ZGC
java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC
9. TLS 1.3 支持
支持 TLS 1.3 协议:
// 配置 SSL 上下文
SSLContext context = SSLContext.getInstance("TLSv1.3");
context.init(null, null, null);
// 创建 SSL 套接字工厂
SSLSocketFactory factory = context.getSocketFactory();
10. 标准化的 Pack200 工具
废弃了 Pack200 工具:
# 这些命令在未来版本将被移除
pack200
unpack200
总结
JDK 11 作为一个 LTS 版本,带来了多项重要的改进。HTTP Client API 的标准化和 String 类的新方法提供了更好的开发体验,而新的垃圾收集器选项则为不同场景提供了更多选择。建议企业用户考虑从 JDK 8 升级到 JDK 11,以获得这些新特性和性能改进。