学习 Java 内存管理,建议从“理解 JVM 内存模型 → 掌握垃圾回收机制 → 结合代码实践 → 排查真实问题”这条主线推进。下面给你一套由浅入深、可落地执行的学习路线。
一句话概括:
Java 内存管理 = JVM 如何分配内存 + 如何回收不再使用的内存
你主要关注两个核心问题:
重点掌握下面几个区域(HotSpot JVM):
| 区域 | 作用 | 是否 GC |
|---|---|---|
| 程序计数器 | 记录当前线程执行位置 | 否 |
| Java 虚拟机栈 | 方法调用、局部变量 | 否 |
| 本地方法栈 | native 方法 | 否 |
| 堆(Heap) | 对象实例 | ✅ 是 |
| 方法区(元空间 Metaspace) | 类信息、常量、静态变量 | ✅ 是 |
典型分代模型(G1 之前):
Young Generation
├── Eden
├── Survivor 0
└── Survivor 1
Old Generation
✅ 面试 & 实战高频点
核心概念:可达性分析(Reachability Analysis)
常见 GC Roots:
❌ 不要再说“引用计数为 0 就回收”(Java 不用这个)
| 算法 | 思想 |
|---|---|
| 标记-清除 | 标记 → 清除 |
| 标记-整理 | 标记 → 移动对象 |
| 复制算法 | 两块空间复制 |
| 分代收集 | 不同代用不同算法 |
| GC | 特点 | 场景 |
|---|---|---|
| Serial | 单线程 | 客户端 |
| Parallel | 吞吐量优先 | 后台计算 |
| CMS | 低延迟 | 老系统 |
| G1 | 区域化、可预测 | ✅ 主流 |
| ZGC | 超低延迟 | 大内存 |
✅ 建议:重点学 G1
public class MemoryTest {
public static void main(String[] args) {
byte[] b = new byte[10 * 1024 * 1024]; // 10MB
b = null;
System.gc();
}
}
配合 JVM 参数:
-XX:+PrintGCDetails
-Xlog:gc*
典型场景:
static List<Object> list = new ArrayList<>();
常见类型:
Java heap spaceMetaspaceUnable to create new native thread| 工具 | 作用 |
|---|---|
| jps | 查看 Java 进程 |
| jstat | GC 统计 |
| jmap | 堆快照 |
| jstack | 线程栈 |
重点学会:
System.gc() 不推荐?✅ 不要死背 GC 参数
✅ 先理解“为什么这样设计”
✅ 结合一个真实 OOM 案例学习
✅ GC 是手段,不是目的
如果你愿意,我可以:
你现在是 初学 / 面试准备 / 实际项目遇到问题?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。