flowchart LR
N0["01 类加载与内存"]
N1["02 垃圾收集"]
N2["03 线程与任务"]
N3["04 可见性与同步"]
N4["05 锁与原子操作"]
N5["06 线程池与异步"]
N6["07 诊断与版本边界"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6
JVM与并发
现代 Java Backend Engineering 学习路线:JVM与并发
0 子目录5 文档

CHAPTER OVERVIEW · 章节概览
先理解代码怎样运行和使用内存,再处理线程协作与可见性;高级并发能力要结合项目使用的 JDK 版本。
本章学习路线
箭头表示建议的学习顺序;先理解问题,再逐步进入实现与实践。
按顺序学习
5JVM 与并发:从运行时到生产诊断服务变慢或内存不断上涨时,猜一个 JVM 参数通常不是好的起点。先保留运行条件,再收集线程、内存和 GC 的信息。本节给出学习顺序,让后面的诊断工具都有一个具体要回答的问题。JVM 内存、类加载、字节码与垃圾收集写下 new 之后,对象在哪里分配?一个方法反复调用,执行方式会一直相同吗?JVM 负责处理这些运行细节。下面把编译、类加载、方法执行和垃圾收集连起来看,再介绍怎样观察一个正在运行的进程。Java 并发与多线程:生命周期、同步、锁、线程池、虚拟线程与取消一个线程等待网络结果时,另一个线程可以继续做事;但两个线程一起改同一份数据,也会带来新的问题。本章先把启动、等待和取消讲清,再讨论共享数据。不要把“同时执行”直接等同于“更快”。JMM、线程池、锁、原子类与 CompletableFuture多线程程序中,一个线程写了值,另一个线程何时能看到,不能只凭源码的先后顺序判断。JMM 解释这些约束,锁和原子类帮助我们满足它们。下面再看线程池和 CompletableFuture 怎样组织任务,而不是替代这些规则。Virtual Threads、Scoped Values 与 Structured Concurrency虚拟线程适合用来理解一个新问题:大量任务在等待 I/O 时,怎样降低线程带来的负担?它不负责让计算本身变快。读这一章时,把“同时等多少任务”与“同时算多少任务”分开,再看上下文传递和子任务管理。