背景
Java 相关文章分散在多篇文章中。本文用 关系图 + 索引表 串起 JVM 运行时、类加载、调试、字节码织入、生产诊断等概念,便于从一点跳到专题文。
与 BTrace 对话中沉淀的 attach / agent / ASM 链路,是下图右侧「生产诊断」分支的核心。
总览关系图
flowchart TB
subgraph runtime [JVM 运行时]
HS[HotSpot 简介]
JVM[jvm 通用概念]
CL[classloader]
GC[java-gc 等]
end
subgraph native [Native 与通道]
JVMTI[JVMTI]
ATT[Attach API]
JCMD[jcmd]
end
subgraph debug [调试与开发热更]
JPDA[JPDA 远程调试]
HOT[开发期热替换 DCEVM]
SBDT[Spring Boot DevTools]
end
subgraph instrument [字节码与 Agent]
INST[java.lang.instrument]
ASM[java-asm]
end
subgraph prod [生产诊断]
BTRACE[BTrace]
TOOL[诊断工具选型]
JFR[JFR]
end
HS --> CL
HS --> GC
HS --> ATT
HS --> JVMTI
JPDA --> JVMTI
ATT --> INST
INST --> ASM
ASM --> BTRACE
ATT --> BTRACE
JCMD --> ATT
HOT --> JPDA
HOT --> ASM
BTRACE --> TOOL
JFR --> TOOL
SBDT -.->|非 JVM HotSwap| CL
按主题索引
JVM 与 HotSpot
| 概念 | 文章 |
|---|---|
| JVM 生态、实现选型 | Java 虚拟机生态与选型 |
| HotSpot 架构与站内索引 | HotSpot 简介 |
| HotSpot 启动参数 | hotspot-options |
| JIT / C1·C2 / 分层编译 | hotspot-jit |
| GC、分代(多篇) | java-gc 等 |
| Safepoint | safepoint |
类加载
| 概念 | 文章 |
|---|---|
| 双亲委托、命名空间、Agent 与业务 ClassLoader | java classloader |
java.lang.Class(类型元信息、获取方式) |
lang-class |
Class.forName |
class-forname |
调试体系(JPDA)
| 概念 | 文章 |
|---|---|
| JPDA 三层 JDI / JDWP / JVMTI、远程调试 | JAVA 调试与 JPDA |
| JVMTI native 接口 | JVMTI |
Attach 与内置诊断
| 概念 | 文章 |
|---|---|
Attach API、loadAgent、与 jcmd 区别 |
Java Attach API |
| jcmd、Diagnostic Command | jcmd |
字节码、Agent、织入
| 概念 | 文章 |
|---|---|
| ASM、Instrumentation、retransform、INVOKESTATIC 示意 | Java ASM 与运行时字节码织入 |
| BTrace 安装、attach、脚本、慢调用 | BTrace |
| 生产诊断工具选型(BTrace / Arthas / JFR) | 生产环境诊断工具选型 |
| JFR | Java Flight Recorder |
开发期热替换(非 BTrace)
| 概念 | 文章 |
|---|---|
| HotSwap、DCEVM、HotSwapAgent | 开发期热替换 |
| Spring Framework 总览与演变 | Spring |
| Spring Boot DevTools Restart | Spring Boot DevTools |
| Spring Boot 总览 | Spring Boot |
| Spring IoC / 依赖注入 | Spring IoC |
| Spring Bean 生命周期 | Spring Bean Lifecycle |
| Spring WebFlux | Spring WebFlux |
| Java Virtual Threads | Java Virtual Threads |
| Spring Boot 3.x 迁移 | Spring Boot 3.x Migration |
| IDE / DCEVM 热更 vs attach 探针 | 见 java-asm、BTrace |
AOP / 其它织入
| 概念 | 文章 |
|---|---|
| AspectJ 编译时织入 | AspectJ CTW |
| CGLIB、AOP | cglib、aop |
BTrace 相关概念链(精读路径)
若从 BTrace 出发,建议按因果顺序阅读:
HotSpot + Attach 通道 → /hotspot 、/attach-api
loadAgent / agentmain → /attach-api 、/btrace §概念厘清
Instrumentation + ASM → /asm
业务类 vs agent ClassLoader → /classloader
JVMTI / JPDA(对比调试) → /jvmti 、/java-debug-jpda
开发热更(易混淆) → /dcevm-hotswapagent 、/spring-boot-devtools
工具选型 → /production-diagnostics-tooling
易混淆对照
| 问题 | 结论 | 详见 |
|---|---|---|
loadAgent 会跑 agent 的 main 吗? |
否,走 agentmain |
BTrace、attach-api |
| attach 时脚本进 JVM 了吗? | 否,先 agent,后 Socket 下发 | BTrace |
| Agent 与业务同一进程吗? | 是;ClassLoader 路径不同 | classloader、BTrace |
| 开发 HotSwap = BTrace? | 否;JPDA vs attach 探针 | dcevm-hotswapagent、java-asm |
| JVM 限制 agent 只能监控? | 否;BTrace 在校验脚本 | java-asm、BTrace |
| Spring = Spring MVC? | 否;MVC 只是 Framework 的 Web 模块 | Spring |
| Spring 1.x 就用注解? | 否;1.x 以 XML 为主,2.0 / 2.5 才注解化 | Spring、JDK 5 |
| 用了注解就不需要 XML? | 否;2.5 后多年 XML 骨架 + 注解业务很常见 | Spring |
| 只有 Boot 才去掉 XML? | 否;3.0 Java Config 已可零 XML;Boot 靠自动配置推到几乎零配置 | Spring、Spring Boot |
@Autowired 是 JDK 内置注解? |
否;Spring 自定义,依赖 JDK 5 注解机制 | annotation、Spring |
维护说明
新增 Java 专题文时,可在本文对应主题表补一行链接,并在 mermaid 图中增加节点(保持可读即可,不必穷尽所有文章)。
| 时间 | 修改内容 |
|---|---|
| 2026-06-19 | JVM 索引表拆分:jvm 生态、hotspot-options |
| 2026-06-21 | 类加载索引增加 lang-class.md |
| 2026-06-24 | 开发期热替换表增加 Spring 链接 |
| 2026-06-24 | 易混淆对照增加 Spring / MVC / 注解相关三行 |
| 2026-06-24 | 易混淆对照补充 XML 混合期、Boot 与 Java Config 分工 |
| 2026-06-26 | 开发期热替换表补充 IoC、WebFlux、虚拟线程、Boot 3 迁移链接 |
| 2026-07-15 | JVM 与 HotSpot 表更新 jvm-compiler 链接为 hotspot-jit |
| 2026-08-11 | 开发期热替换表增加 Spring Bean 生命周期链接 |