理解 Java 的垃圾回收(Garbage Collection,GC),可以从「为什么需要 → 是什么 → 怎么工作 → 常见问题」这几个层次来把握。
在 C / C++ 中,内存需要手动申请和释放(malloc / free、new / delete),容易出问题:
Java 的设计目标是让程序员少管内存,于是引入了 GC:
JVM 自动判断哪些对象不再使用,并回收其占用的内存
简单一句话:
没有被任何“可达引用”指向的对象,就是垃圾
Object o = new Object();
o = null; // 原来的对象再也没有引用指向它 → 垃圾
GC Roots 包括:
找出哪些对象是“垃圾”
Java 堆一般分为:
┌───────────────┐
│ 新生代 Young │
│ ├ Eden │
│ ├ S0 │
│ └ S1 │
├───────────────┤
│ 老年代 Old │
└───────────────┘
经验规律:
| 回收器 | 特点 |
|---|---|
| Serial | 单线程,简单 |
| Parallel | 多线程,吞吐优先 |
| CMS | 低停顿(已废弃) |
| G1 | 主流,平衡 |
| ZGC | 超低延迟 |
❌ GC 是“实时清理”
✅ 它是按需触发,不是立刻
❌ 调用 System.gc() 一定会回收
✅ 只是“建议”,JVM 可忽略
❌ 没有引用就是立刻消失
✅ 要等 GC 运行
Java 垃圾回收就是:JVM 通过可达性分析,自动找到不再被使用的对象,并释放其内存,让程序员不用手动管理内存。
如果你愿意,我也可以用生活比喻 / 图解 / 面试角度 / 源码级再讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。