Java 的垃圾回收(Garbage Collection,GC)是 JVM 自动管理内存的机制,核心目标是自动释放不再使用的对象所占用的堆内存,避免内存泄漏和手动管理内存的复杂性。
下面从 核心思想 → 如何判断垃圾 → 回收算法 → 堆结构 → 常见 GC 器 → 简单示例 来说明。
当一个对象“不可能再被使用”时,它就可以被回收
Java 程序员不需要(也不能)显式释放对象内存,JVM 会在合适时机自动回收。
❌ Java 不使用这种方式
从 GC Roots 出发,向下搜索:
GC Roots 包括:
如果一个对象无法从 GC Roots 到达,就是垃圾。
GC Roots → A → B
↘ C(不可达 → 回收)
Java 堆通常分为:
堆
├── 年轻代(Young)
│ ├── Eden
│ ├── Survivor From
│ └── Survivor To
└── 老年代(Old)
| 回收器 | 特点 |
|---|---|
| Serial | 单线程,简单 |
| Parallel | 多线程,吞吐优先 |
| CMS | 并发,低停顿(已废弃) |
| G1 | 分Region,平衡型(主流) |
| ZGC | 超低延迟(JDK11+) |
public class Demo {
public static void main(String[] args) {
Object o = new Object();
o = null; // 原对象不可达
System.gc(); // 建议 JVM 回收(不保证立刻)
}
}
Java GC 通过可达性分析找到垃圾对象,按代使用不同算法自动回收堆内存,开发者无需手动释放。
如果你愿意,我也可以:
你想深入哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。