跳到主要内容

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);
java

主要特点:

  • 支持 HTTP/2
  • 异步请求支持
  • WebSocket 支持
  • 响应式流集成

2. Lambda 参数的局部变量语法

支持在 Lambda 表达式中使用 var:

// 使用 var 在 Lambda 中声明参数
(var x, var y) -> x + y

// 添加注解
(@NotNull var x, @Nullable var y) -> x + y
java

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
java

4. 运行单文件源代码

直接运行 Java 源文件:

# 直接运行源文件
java HelloWorld.java
bash

5. Flight Recorder

开源了 Flight Recorder:

// 启动 JFR 记录
jcmd <pid> JFR.start

// 配置 JFR
-XX:StartFlightRecording=duration=60s,filename=recording.jfr
java

6. 动态类文件常量

支持动态类文件常量:

// 示例:使用动态常量
public class DynamicConstantExample {
private static final String CONSTANT = "Hello";
private static final int NUMBER = 42;

public void example() {
// 使用动态常量
System.out.println(CONSTANT + NUMBER);
}
}
java

7. Epsilon 无操作垃圾收集器

引入了 Epsilon 垃圾收集器:

# 启用 Epsilon GC
java -XX:+UseEpsilonGC -jar application.jar
bash

8. ZGC 实验性垃圾收集器

引入了实验性的 ZGC:

# 启用 ZGC
java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC
bash

9. TLS 1.3 支持

支持 TLS 1.3 协议:

// 配置 SSL 上下文
SSLContext context = SSLContext.getInstance("TLSv1.3");
context.init(null, null, null);

// 创建 SSL 套接字工厂
SSLSocketFactory factory = context.getSocketFactory();
java

10. 标准化的 Pack200 工具

废弃了 Pack200 工具:

# 这些命令在未来版本将被移除
pack200
unpack200
bash

总结

JDK 11 作为一个 LTS 版本,带来了多项重要的改进。HTTP Client API 的标准化和 String 类的新方法提供了更好的开发体验,而新的垃圾收集器选项则为不同场景提供了更多选择。建议企业用户考虑从 JDK 8 升级到 JDK 11,以获得这些新特性和性能改进。