目录

一、JDK 11 整体概况

二、语言层面新特性

1. Lambda 表达式支持 var(JEP 323)

三、标准库 API 重磅增强(开发效率提升)

1. String 类新增实用方法(高频必用)

2. Files 工具类增强:一行读写文件

3. Collection 转数组更优雅

4. Optional 加强

四、标准化 HTTP Client(JEP 321)

五、直接运行单 Java 文件(JEP 333)

六、垃圾回收器升级(重点面试点)

1. ZGC 实验性引入(JEP 333)

2. Epsilon GC(No-Op GC)

3. G1 成为默认 GC

七、安全与加密增强

八、模块化与移除内容(升级必看)

九、性能与诊断工具升级

1. JFR 开源(Java Flight Recorder)

2. 更好的 Heap Profiling

3. 支持 Unicode 10

十、JDK 8 升级到 JDK 11 常见问题

十一、总结:为什么要用 JDK 11?


大家好,我是你们的 Java 后端开发者。JDK 11 是继 JDK 8 之后业界公认最稳定、使用最广泛的长期支持(LTS)版本,也是目前互联网公司、传统企业、微服务架构升级的首选目标版本。不管是面试、项目重构还是技术选型,JDK 11 都是 Java 工程师必须掌握的核心版本。

本文从语言特性、API 增强、标准库更新、GC、安全、模块化、性能工具等维度全面盘点,内容详实、可直接用于学习、面试总结和项目实践。


一、JDK 11 整体概况

  • 发布时间:2018-09-25
  • 版本类型:LTS(长期支持版)
  • 后续商用支持周期长,是目前生产环境主流版本
  • 相比 JDK 8:模块化成熟、语法更简洁、GC 更强、内置 HTTP Client、安全性大升级
  • 相比 JDK 9/10:稳定、无过渡版本问题,适合直接落地

一句话总结:JDK 8 是过去,JDK 11 是现在,JDK 17 是未来,而 JDK 11 是最稳妥的升级跳板。


二、语言层面新特性

1. Lambda 表达式支持 var(JEP 323)

JDK 10 带来了局部变量类型推断 var,JDK 11 进一步将其扩展到 Lambda 表达式的参数上。

// JDK 11 写法
var list = List.of("Java", "JDK11", "CSDN");
list.stream()
    .map((var s) -> s.toUpperCase())
    .forEach(System.out::println);

优势:

  • 统一变量声明风格
  • Lambda 参数可以加注解:
(@Nullable var x, @NonNull var y) -> x + y
  • 代码更整洁,便于阅读和维护

三、标准库 API 重磅增强(开发效率提升)

1. String 类新增实用方法(高频必用)

JDK 11 对 String 做了非常多增强,几乎每个项目都能用得上。

// 1. 判断是否为空白字符(包括全角空格、制表符、换行)
"   ".isBlank();        

// 2. 去除前后空白(比 trim() 更强大,支持全角空格)
" Java 11 ".strip();    

// 3. 去除左边空白
" Java".stripLeading(); 

// 4. 去除右边空白
"Java ".stripTrailing();

// 5. 字符串重复
"=".repeat(10); // ==========

// 6. 按行分割返回 Stream
"a\nb\nc".lines().forEach(System.out::println);

意义: 大量简化字符串处理,告别第三方工具类(如 Apache Commons Lang)。


2. Files 工具类增强:一行读写文件

以前读写文件需要 IO 流、try-catch,现在极简:

Path path = Paths.get("test.txt");

// 写入字符串
Files.writeString(path, "Hello JDK11", StandardCharsets.UTF_8);

// 读取字符串
String content = Files.readString(path, StandardCharsets.UTF_8);

非常适合配置读取、文本处理、脚本类场景。


3. Collection 转数组更优雅

List<String> list = List.of("A", "B", "C");

// JDK 11
String[] array = list.toArray(String[]::new);

代码更简洁,语义更清晰。


4. Optional 加强

// 空值时执行一个 Runnable
Optional.<String>empty().ifPresentOrElse(
    System.out::println, 
    () -> System.out.println("值不存在")
);

对空值的处理更加优雅,减少 if-else


四、标准化 HTTP Client(JEP 321)

JDK 11 正式把 Java 9 引入的HttpClient 标准化,内置支持 HTTP/2、WebSocket、异步、连接池。

再也不用手动引入 OkHttp 或 HttpClient 框架!

示例:同步请求

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://www.baidu.com"))
        .GET()
        .build();

HttpResponse<String> 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)
      .join();

优势:

  • 原生支持 HTTP/2,多路复用,性能更高
  • 支持异步非阻塞,适合高并发
  • 支持 WebSocket
  • 无需第三方依赖,减少包冲突

五、直接运行单 Java 文件(JEP 333)

JDK 11 允许直接运行 .java 文件,无需手动 javac 编译。

java Hello.java

适用场景:

  • 写小工具、测试代码
  • 脚本化、自动化任务
  • 教学、快速验证逻辑

极大提升开发调试效率。


六、垃圾回收器升级(重点面试点)

1. ZGC 实验性引入(JEP 333)

JDK 11 最重磅的 GC 之一:ZGC

  • 目标:停顿时间 < 10ms
  • 支持 TB 级大堆
  • 吞吐量影响极小
  • 云原生、大内存服务、低延迟服务的福音

启用方式:

-XX:+UnlockExperimentalVMOptions -XX:+UseZGC

注:JDK 11 中为实验版,JDK 17 后正式可用。

2. Epsilon GC(No-Op GC)

只分配内存,不做垃圾回收。

用途:

  • 性能基准测试
  • 短生命周期任务
  • 验证内存分配速率
-XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC

3. G1 成为默认 GC

JDK 11 默认 GC 就是 G1,综合吞吐量与延迟表现均衡,适合绝大多数服务。


七、安全与加密增强

  • TLS 1.3 内置支持,更快、更安全、握手延迟更低
  • 支持新一代椭圆曲线算法:Curve25519/Curve448
  • 支持 ChaCha20/Poly1309 对称加密算法
  • 废弃老旧不安全的加密协议

对金融、支付、微服务安全通信非常友好。


八、模块化与移除内容(升级必看)

JDK 11 彻底移除了 Java EE 和 CORBA 相关模块,包括:

  • JAXB
  • JAX-WS
  • JAF
  • CORBA

这些模块在 JDK 8 中存在,JDK 9/10 被标记为废弃,JDK 11 直接删除。

升级时如果报错类找不到,需要手动引入依赖:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.3</version>
</dependency>

九、性能与诊断工具升级

1. JFR 开源(Java Flight Recorder)

以前商业版功能,JDK 11 开始开源免费

  • 极低开销性能监控
  • 方法执行、内存分配、线程、IO、GC 全视角
  • 适合生产环境问题定位、性能调优

2. 更好的 Heap Profiling

低开销、实时堆内存分析,定位内存泄漏更方便。

3. 支持 Unicode 10

更全的字符、表情符号、特殊符号支持。


十、JDK 8 升级到 JDK 11 常见问题

  1. 部分 API 被删除(如 JAXB)
  2. 内部 API 无法直接访问(sun.misc 包)
  3. 第三方依赖不兼容(老框架、老工具)
  4. 启动参数、GC 参数调整
  5. Lombok、IDEA、Maven/Gradle 需升级适配版本
  6. 模块化导致的访问权限问题

总体来说:只要框架不是特别老旧,升级成本可控,收益巨大。


十一、总结:为什么要用 JDK 11?

  • LTS 稳定版,企业生产环境首选
  • 语法更简洁:var、String 增强
  • 原生强大:HTTP Client、文件读写、Stream 增强
  • 低延迟 GC(ZGC) 为高并发大内存服务铺路
  • 安全、性能、工具链全面现代化
  • 是从 JDK 8 迈向更高版本(JDK 17+)的必经之路

如果你还在 JDK 8,建议尽快规划升级;如果你即将开始新项目,直接 JDK 11 起步

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐