Java9新特性

推荐链接:

Java 9 新特性 - 菜鸟

Java 9 新特性概览

G1 成为默认垃圾回收器

在 Java 8 的时候,默认垃圾回收器是 Parallel Scavenge(新生代)+Parallel Old(老年代)。到了 Java 9, CMS 垃圾回收器被废弃了,G1(Garbage-First Garbage Collector) 成为了默认垃圾回收器。

**HotSpot 虚拟机垃圾回收调优指南:**https://docs.oracle.com/en/java/javase/21/gctuning/introduction-garbage-collection-tuning.html

响应式流 ( Reactive Streams )

Flow API (JDK 标准)

  • 定位:最低层的 标准接口,类似 JDBC。
  • 作用:定义了 PublisherSubscriberSubscriptionProcessor 四个核心接口。
  • 优点:轻量,标准化,JDK 自带。
  • 缺点:太底层,没有 map/filter 之类的操作符,写业务代码非常啰嗦。
  • 学习建议:只需要 了解概念,不用深入研究源码或日常直接用。

👉 类比:你会用 JDBC 吗?是的,但实际开发会用 MyBatis / JPA。
Flow API 就是响应式世界里的 JDBC。

Reactor (框架库)

  • 定位:功能齐全的 响应式编程框架,实现了 Reactive Streams 标准。
  • 作用:提供了丰富的 操作符(map、flatMap、buffer、zip、merge、switchMap…),让你能写出简洁的异步/流式逻辑。
  • 优点
    • Spring 官方维护,生态强大。
    • API 设计完善,几乎是 Java 响应式编程的事实标准。
    • 与 WebFlux、R2DBC 等紧密结合。
  • 缺点:学习曲线陡峭,思维模式和命令式差别大。

👉 类比:它相当于 MyBatisHibernate,站在 Flow API 之上,让你能写得舒服。

Spring WebFlux (Web 框架)

  • 定位:基于 Reactor 的 响应式 Web 框架,类似于 Spring MVC 的响应式版本。
  • 作用:用于构建 高并发、非阻塞 Web 应用
  • 特点
    • Controller 方法返回 Mono<T>Flux<T>(Reactor 类型)。
    • 底层就是 Reactor + Netty(默认),而不是 Tomcat 的阻塞式线程池。
    • 适合 IO 密集型场景(API 网关、消息推送、WebSocket、长连接)。
  • 缺点
    • 对 CPU 密集型业务提升有限。
    • Debug 较麻烦(响应式链式调用不容易排错)。

👉 类比:Spring MVC 之于 Servlet API。WebFlux 之于 Reactor。

那么,应该学哪个?

给你一个清晰的学习路径:

  1. 先了解 Flow API
    • 知道它是什么:Reactive Streams 标准。
    • 知道为什么要有背压。
    • 但日常不会直接写。
  2. 重点学习 Reactor
    • 这是响应式编程的 核心技能
    • 学习 Mono / Flux、常用操作符、错误处理、背压机制。
    • 学习模式转换:命令式 → 响应式。
  3. 再学习 Spring WebFlux
    • 如果你以后要写高并发 Web 服务,就要用到它。
    • 它是基于 Reactor 的,学会 Reactor 再学 WebFlux 就水到渠成。
    • 如果你只写内部管理系统(低并发),WebFlux 反而不是必须。