背景

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 生命周期链接