JVM:内存区域、垃圾回收与调优
梳理 JVM 运行时数据区、对象存活判定、主流 GC 算法与 G1 回收器,建立 JVM 调优与 OOM 排查的基本框架。
本节你将能
讲清堆/栈/方法区的区别、如何判断对象可回收,并说清 Minor GC 与 Full GC 的触发条件。
核心要点
- 运行时数据区:线程私有(程序计数器、虚拟机栈、本地方法栈) + 共享(堆、元空间)。
- 可达性分析:从 GC Roots 出发不可达才可回收;finalize 可自救一次。
- 算法:标记-清除/复制/标记-整理/分代收集;G1 按 Region 实现可预测停顿。
- 对象进老年代:大对象、长期存活、动态年龄、Survivor 不足。
调优与排查
常用 -Xms/-Xmx/-Xmn/-XX:+UseG1GC;OOM 结合堆转储(MAT)定位大对象与泄漏;开启 HeapDumpOnOutOfMemoryError。
面试连招
追问:G1 相比 CMS 的优势?为什么 Full GC 要尽量避免?什么是内存泄漏?