Skip to content

JVM & GC · 必学内容图

一、运行时数据区 / 内存结构

JDK/JRE/JVM 关系、JVM 整体架构
程序计数器、虚拟机栈(栈帧:局部变量表/操作数栈/动态链接/返回地址)、本地方法栈
堆:新生代(Eden/S0/S1)、老年代
方法区演进:永久代 → 元空间(Metaspace),字符串常量池位置变化
直接内存(堆外内存)与 NIO、-XX:MaxDirectMemorySize
各区域 OOM / StackOverflow 对照

二、对象创建与内存布局

对象创建五步(类检查→分配→零值→设头→init)
对象内存布局:Mark Word + 类型指针 + 实例数据 + 对齐填充;JOL 查看;压缩指针
对象访问方式:句柄 vs 直接指针
大对象直接进老年代、对象晋升年龄、动态年龄判断

三、类加载机制

类生命周期:加载→验证→准备→解析→初始化(准备阶段零值 vs 初始化赋值)
初始化触发时机(主动引用/被动引用)
双亲委派模型、三层类加载器、打破方式(loadClass vs findClass)
SPI 与线程上下文类加载器
JDK9 模块化类加载变化
自定义类加载器实战

四、GC 判定与引用

引用计数法及缺陷(循环引用)
可达性分析、GC Roots 五类
三色标记、漏标问题、写屏障/读屏障(SATB vs 增量更新)
强/软/弱/虚四种引用、ReferenceQueue、软引用 OOM 前回收
finalize() 机制(Finalizer 队列、为什么不推荐)

五、GC 算法

标记-清除(碎片)、复制算法、标记-整理、分代收集
分代模型:Minor GC / Major GC / Full GC 区别与触发条件
新生代 GC 全流程、分配担保(Handle Promotion Failure)
跨代引用:Card Table / 记忆集
SafePoint / SafeRegion

六、垃圾收集器

Parallel Scavenge / Parallel Old(吞吐量优先、JDK8 默认)
CMS:四阶段、三大问题(碎片/并发失败/浮动垃圾)、退化为 Serial Old
G1:Region 设计、SATB、CSet、停顿预测模型、Mixed GC、 evacuation failure
ZGC:着色指针 + 读屏障、<1ms 停顿;分代 ZGC(JDK21 默认)
Shenandoah:Brooks 转发指针、与 ZGC 对比
收集器选型决策(堆大小 × 停顿要求)

七、GC 日志与调优

常用参数:-Xms/-Xmx、-Xmn/NewRatio、MetaspaceSize、MaxGCPauseMillis
GC 日志解读(JDK8 `-XX:+PrintGCDetails` vs JDK9+ `-Xlog:gc*`)
调优方法论:定目标→采数据→单变量→验证
常见场景:内存泄漏致频繁 FGC、大对象、缓存滥用
容器环境(Docker/K8s)内存感知与坑
低延迟系统 GC 设计

八、故障诊断

OOM 各类型(heap/Metaspace/DirectMemory/GC overhead/unable to create native thread)
内存泄漏排查:jmap histo → dump → MAT 支配树
CPU 100% 排查:top → 线程号十六进制 → jstack
堆外内存泄漏:NMT、-XX:NativeMemoryTracking

九、JIT 编译优化

解释执行 vs 编译执行、分层编译 C1/C2
方法内联(条件、final/private)
逃逸分析三优化:锁消除、标量替换/栈上分配、消除同步
OSR 与逆优化(去优化)
JMH 基准测试方法论

十、工具

命令行:jps/jstat/jmap/jstack/jinfo/jcmd
JFR + JMC(生产低开销、事件模型)

十一、新特性

GraalVM AOT / Native Image(原理、局限:反射/动态代理配置、闭世界假设)

手撕 → 框架 → 生产化,一步步把 AI Agent 工程化搞透。
粤ICP备2026104257号-1