在 Java 中,对象回收主要由 JVM 的垃圾回收机制(GC,Garbage Collection) 自动完成。下面从「什么时候回收」「怎么判定可回收」「回收过程」「如何主动影响回收」几个方面说明。
当一个对象“不可达”时,才可能被判为垃圾对象。
不可达指的是:
常见 GC Roots 包括:
GC Roots → 引用链 → 对象
如果对象不在引用链上 → 可回收
| 引用类型 | 特点 | 是否容易被回收 |
|---|---|---|
| 强引用 | Object o = new Object() |
不回收 |
| 软引用 | SoftReference |
内存不足时回收 |
| 弱引用 | WeakReference |
下次 GC 就回收 |
| 虚引用 | PhantomReference |
仅用于跟踪回收 |
finalize():
| 区域 | 特点 | 回收频率 |
|---|---|---|
| 新生代 | 对象生命周期短 | 高 |
| 老年代 | 大对象、长期存活 | 低 |
| 永久代 / 元空间 | 类信息等 | 很少 |
System.gc(); // 只是“建议”JVM 进行 GC
obj = null;
❌ 对象 = null 就立刻回收
✅ 只是“可能”变得可回收
❌ finalize() 一定执行
✅ 不保证执行,也不推荐使用
Java 对象回收 = JVM 自动通过可达性分析,回收无强引用、不可达的对象
如果你愿意,我也可以:
System.gc() 的真实行为免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。