JDK 11
JDK 11 是继 JDK 8 之后的重要 LTS 版本,提供正式 HTTP Client、单文件源码运行,并移除一批不再属于 JDK 的 Java EE 模块。
标准 HTTP Client
java.net.http 支持 HTTP/1.1、HTTP/2、同步、异步和 WebSocket。
java
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("https://example.com"))
.GET()
.build();
HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());异步调用返回 CompletableFuture<HttpResponse<T>>。
Lambda 参数中的 var
java
BiFunction<Integer, Integer, Integer> add = (var left, var right) -> left + right;主要价值是允许给 Lambda 参数添加注解;同一个参数列表不能混用 var、显式类型和省略类型。
常用 API
java
" ".isBlank();
"a\nb".lines();
"x".repeat(3);
" text ".strip();
Path file = Path.of("message.txt");
Files.writeString(file, "hello");
String text = Files.readString(file);
Predicate<String> notBlank = Predicate.not(String::isBlank);还包括 Optional.isEmpty()、集合 toArray(IntFunction<T[]>) 等增强。
单文件源码运行
bash
java Hello.java适合脚本、演示和小工具;它不是完整项目构建系统的替代品。
JVM 与安全
| 特性 | 说明 |
|---|---|
| Flight Recorder | JFR 开源并进入 OpenJDK,适合低开销生产诊断 |
| ZGC | 作为实验性低延迟 GC 引入 |
| Epsilon GC | 只分配、不回收内存,用于性能实验和短生命周期任务 |
| TLS 1.3 | JSSE 支持 TLS 1.3 |
| Nest-Based Access Control | 改善嵌套类之间的私有成员访问 |
移除与弃用
- 移除 Java EE 与 CORBA 模块,包括 JAXB、JAX-WS、Activation、Common Annotations 等;应用需要添加独立依赖。
- 移除 JavaFX、Java Mission Control 等与 JDK 一起分发的组件。
- Nashorn JavaScript 引擎和 Pack200 标记为待移除。
从 JDK 8 升级
- 先升级 Maven/Gradle、测试框架、字节码工具和应用框架。
- 使用
jdeps检查内部 API 与缺失模块依赖。 - 显式补充 JAXB 等依赖。
- 检查反射警告、GC 参数、TLS 和字体/时区差异。