Java 知识图谱
- 主题域:java
- 关键词:Java、JDK、JVM、知识图谱、知识地图、全景、学习路线、技术栈、Java 生态
- 状态:草稿
一、一句话结论
把 Java 技术体系分成七层——语言核心、JVM、集合框架、并发编程、IO 与网络、生态框架、工程与工具——每层记住少数关键主题,排查与学习时先定层再下钻;JDK 版本格局以 8 / 11 / 17 / 21 / 25 五个 LTS 为锚点。
二、原理与来由(分层依据)
分层按「一段 Java 代码从写出来到跑起来、再到被工程化」的依赖链划分:语言核心是最小写代码单元 → 编译成字节码交给 JVM 执行 → 执行中用的数据结构是集合框架、调度靠并发机制、出入靠 IO 与网络 → 长期实践沉淀出生态框架 → 工程与工具贯穿始终。层的顺序即下钻的顺序:语言层的行为异常查语法与语义,性能异常查 JVM,数据结构异常查集合,时序异常查并发,交互异常查 IO/网络,架构异常查框架选型。
三、细节与用法
每层一张表:主题、一句话要点、检索关键词(供索引跳转,细分条目建立后在此登记)。
① 语言核心
| 主题 |
一句话要点 |
检索关键词 |
| OOP 四大特性 |
封装、继承、多态、抽象;接口与抽象类的取舍是默认设计题 |
面向对象、接口、抽象类、多态 |
| 泛型 |
编译期类型检查,运行时类型擦除(List<Integer> 与 List<String> 的 Class 是同一个);通配符 ? extends / ? super 与 PECS 原则 |
泛型、类型擦除、通配符、PECS |
| 反射与注解 |
运行期检视类与对象,是 Spring、MyBatis 等一切「魔法」的底层;注解本身只是标记,靠反射或 APT 生效 |
反射、注解、 Retention、动态代理 |
| Lambda 与 Stream |
行为参数化 + 声明式数据处理流水线;延迟执行、短路、并行流(并行流默认走 ForkJoinPool.commonPool) |
Lambda、函数式接口、Stream、Optional |
| 异常体系 |
Throwable 分 Error / Exception,RuntimeException 以外都是受检异常;try-with-resources 自动关资源 |
异常、受检异常、try-with-resources |
| 新语法演进 |
Records(不可变数据载体,16 正式)、Sealed 类(17 正式)、Switch 模式匹配与 Record Patterns(21 正式) |
Record、Sealed、模式匹配 |
② JVM
| 主题 |
一句话要点 |
检索关键词 |
| 运行时内存 |
线程私有:程序计数器、虚拟机栈、本地方法栈;线程共享:堆、方法区(JDK 8 起由元空间实现,替代永久代) |
JVM 内存、堆、栈、元空间 |
| 类加载 |
加载 → 验证 → 准备 → 解析 → 初始化;双亲委派可被打破(SPI、热部署都靠这一点) |
类加载器、双亲委派、ClassLoader |
| 垃圾回收 |
分代假说是多数收集器的地基;CMS 已在 14 移除,G1 是 9+ 默认,ZGC/Shenandoah 走低停顿路线(ZGC 23 起默认分代) |
GC、G1、ZGC、Shenandoah、Minor/Full GC |
| JIT 编译 |
解释执行 + 热点代码 JIT(C1/C2)混合模式;逃逸分析、栈上分配、锁消除都发生在 C2 |
JIT、热点探测、逃逸分析 |
| 诊断工具链 |
JDK 自带:jps / jstat / jmap / jstack / jcmd / JFR;第三方:Arthas(在线诊断)、MAT(堆转储分析) |
jstack、jmap、JFR、Arthas、OOM 排查 |
③ 集合框架
| 主题 |
一句话要点 |
检索关键词 |
| 接口层次 |
Collection(List / Set / Queue)与 Map 两棵树;选型先问「要不要有序、可重复、键值、并发」 |
List、Set、Map、Queue |
| ArrayList / LinkedList |
前者随机访问 O(1) 尾插均摊 O(1)、扩容 1.5 倍;后者仅头尾操作占优,绝大多数场景选 ArrayList |
ArrayList、LinkedList、扩容 |
| HashMap 原理 |
数组 + 链表 + 红黑树;链长 ≥ 8 且容量 ≥ 64 树化、树节点 ≤ 6 退化;扩容翻倍重哈希;容量恒为 2 的幂 |
HashMap、树化、哈希冲突、负载因子 |
| ConcurrentHashMap |
1.8 起 CAS + synchronized 锁单桶;size() 是估值不是精确值 |
ConcurrentHashMap、CAS |
| fail-fast / fail-safe |
迭代中结构性改动抛 ConcurrentModificationException;CopyOnWriteArrayList 等并发容器是 fail-safe 的复制底牌 |
CME、迭代器、CopyOnWrite |
④ 并发编程
| 主题 |
一句话要点 |
检索关键词 |
| 线程与线程池 |
ThreadPoolExecutor 七参数(核心数、最大数、存活、单位、队列、工厂、拒绝策略); Executors 的快捷工厂隐藏队列上限,生产慎用 |
线程池、ThreadPoolExecutor、拒绝策略 |
| JMM 与 happens-before |
volatile 保证可见性与有序性、不保证原子性;happens-before 是判断可见性的唯一准绳 |
JMM、volatile、happens-before、指令重排 |
| 锁 |
synchronized(管程,锁升级:偏向 → 轻量 → 重量)与 Lock 系(基于 AQS:state + CLH 队列)两条路线 |
synchronized、锁升级、AQS、ReentrantLock |
| 异步编排 |
CompletableFuture(8+)是异步流水线的主力;ForkJoinTask 是并行流与并发计算的地基 |
CompletableFuture、Future、ForkJoin |
| 虚拟线程 |
JDK 21 正式:廉价海量线程,阻塞即让渡载体;与管程(synchronized)的 pin 问题在 24 的 JEP 491 解决 |
虚拟线程、Loom、结构化并发 |
⑤ IO 与网络
| 主题 |
一句话要点 |
检索关键词 |
| BIO / NIO / AIO |
BIO 一连接一线程;NIO(Channel + Buffer + Selector)多路复用;AIO 事件回调,Linux 上实用性有限 |
BIO、NIO、Selector、多路复用 |
| Netty |
事件循环(EventLoopGroup)+ ChannelPipeline 责任链;零拷贝(FileRegion、CompositeByteBuf)是它的招牌 |
Netty、EventLoop、零拷贝、ByteBuf |
| 网络编程 |
Socket / ServerSocket(BIO 教材)与 SocketChannel(NIO 实战);HttpClient(11 标准)替代老旧 HttpURLConnection |
Socket、HttpClient、TCP |
⑥ 生态框架(后端主线)
| 主题 |
一句话要点 |
检索关键词 |
| Spring IoC / AOP |
控制反转管对象生命周期,动态代理织入横切逻辑;三件套排查入口:Bean 生命周期、循环依赖三级缓存、代理失效场景 |
Spring、IoC、AOP、循环依赖 |
| Spring Boot |
约定优于配置 + 自动装配(@EnableAutoConfiguration + spring.factories / AutoConfiguration.imports) |
Spring Boot、自动装配、Starter |
| 事务 |
@Transactional 的传播行为与失效清单(自调用、非 public、异常类型不匹配)是高频坑位 |
事务、传播行为、失效 |
| 持久层 |
MyBatis(SQL 可控、动态 SQL)与 JPA(面向对象映射)两条路线;连接池 HikariCP 是 Boot 默认 |
MyBatis、JPA、HikariCP |
| 微服务组件 |
注册发现、配置中心、网关、熔断限流(Sentinel / Resilience4j)、链路追踪;组件可换,模式不变 |
微服务、网关、熔断、链路追踪 |
| 消息队列 |
Kafka(日志型、高吞吐)与 RocketMQ(业务型、事务消息)为代表;选型看顺序、事务、堆积三个维度 |
Kafka、RocketMQ、消息队列 |
⑦ 工程与工具
| 主题 |
一句话要点 |
检索关键词 |
| 构建 |
Maven(约定式、XML)与 Gradle(脚本式、增量构建);依赖冲突的排查入口是依赖树 |
Maven、Gradle、依赖冲突 |
| 模块化 |
JPMS(9+,module-info.java);17 起强封装 JDK 内部 API,直接反射 sun.misc.* 会告警 / 失败 |
JPMS、模块化、强封装 |
| 测试 |
JUnit 5 + Mockito 是单测标配;性能结论用 JMH 出,不用裸 main 方法计时 |
JUnit、Mockito、JMH |
| 日志 |
门面 SLF4J + 实现 Logback(Boot 默认);日志框架冲突的排查入口是桥接包冲突 |
SLF4J、Logback、日志冲突 |
JDK 版本演进速查(锚点:LTS)
| 版本 |
年份 |
定位 |
代表特性 |
| 8 |
2014 |
LTS |
Lambda、Stream、java.time、接口默认方法、元空间 |
| 11 |
2018 |
LTS |
var、HTTP Client 标准、单文件直接运行 |
| 17 |
2021 |
LTS |
Records 与 Sealed 正式、强封装内部 API、Switch 模式匹配预览 |
| 21 |
2023 |
LTS |
虚拟线程正式、Switch 模式匹配与 Record Patterns 正式、分代 ZGC(预览) |
| 25 |
2025 |
LTS |
模块导入声明、紧凑源文件与实例 main(详见 JEP 索引;完整清单待核实) |
8 → 11 → 17 → 21 → 25 每两个 LTS 间隔两年;非 LTS 版本只当新特性的预览窗口。
四、流程图(图谱一页图)
flowchart TD
subgraph S1["① 语言核心"]
A1["语法与 OOP"]
A2["泛型 · 反射 · 注解"]
A3["Lambda · Stream"]
A4["异常体系"]
end
subgraph S2["② JVM"]
B1["内存与 GC"]
B2["类加载 · 字节码"]
B3["JIT 优化"]
B4["诊断工具链"]
end
subgraph S3["③ 集合框架"]
C1["List / Set / Queue"]
C2["Map 与 HashMap 原理"]
C3["并发容器"]
end
subgraph S4["④ 并发编程"]
D1["线程与线程池"]
D2["JMM · volatile · 锁"]
D3["异步编排"]
D4["虚拟线程"]
end
subgraph S5["⑤ IO 与网络"]
E1["BIO / NIO / AIO"]
E2["Netty"]
end
subgraph S6["⑥ 生态框架"]
F1["Spring 全家桶"]
F2["持久层"]
F3["微服务组件"]
F4["消息队列"]
end
subgraph S7["⑦ 工程与工具"]
G1["Maven / Gradle"]
G2["测试 · 日志"]
end
S1 -->|"编译为字节码"| S2
S2 ~~~ S3
S3 ~~~ S4
S4 ~~~ S5
S5 ~~~ S6
S6 ~~~ S7
层间竖排是阅读顺序(依赖关系见「二、原理与来由」),唯一实线箭头是源码到运行的编译关系;⑦ 层贯穿全程。
五、边界与关联
- 本条目是地图不是教材:每层只给主题与一句话定位,展开内容进入各细分条目(建立后在
content/README.md 索引登记,并回填本条目对应表格的行)。
- 不覆盖:Android / Java ME / GraalVM native-image 等分支生态;前端无关;算法与数据结构本体(只收 Java 集合的实现细节)。
- 关联条目:Spring 知识图谱(⑥ 层生态框架的展开);JVM、并发等细分条目待建。
六、出处
| 来源 |
位置 |
核实日期 |
| Oracle 官方文档(JDK API、Java 语言规范) |
docs.oracle.com |
2026-10-08 |
| OpenJDK JEP 索引(版本特性以 JEP 为准) |
openjdk.org/jeps/0 |
2026-10-08 |
| 个人实践(长期 Java 后端开发与排查经验) |
各层一句话要点为经验浓缩 |
2026-10-08 |
七、存疑与待办
- JDK 25 的完整特性清单未逐条核对 JEP(表中只列了高置信条目)——待核对 openjdk.org 的 JDK 25 JEP 列表(2026-10-08 记)。
- JDK 26(2026-03)、27(2026-09)是否已发布及内容未核实,本表暂不收录——待核实(2026-10-08 记)。
- Valhalla(值类型)最终落地版本未核实——待核实(2026-10-08 记)。