什么是垃圾?如何判断对象已死?

引言:垃圾回收的第一步 当你创建对象后不再使用它们时: public void createObjects() { User user1 = new User("张三", 25); User user2 = new User("李四", 30); // 方法结束后,user1和user2还能被访问吗? } 这些对象会发生什么?它们如何被回收?在回收之前,JVM如何判断它们是否还有用? 这些问题的答案,都从理解 “什么是垃圾” 开始。 垃圾回收的核心问题: 哪些内存需要回收?(什么是垃圾) 什么时候回收?(GC触发时机) 如何回收?(GC算法和收集器) 本文将深入第一个问题:如何判断对象已死。 什么是垃圾? 定义 垃圾(Garbage) = 不再被使用的对象 更准确地说:垃圾是指无法再被程序访问到的对象。 为什么需要垃圾回收? 内存资源是有限的: 堆内存大小有限(如2GB、4GB) 不断创建对象,内存终将耗尽 需要回收不再使用的对象,释放内存 手动管理的问题(如C/C++): 忘记释放内存 → 内存泄漏 释放后继续使用 → 悬空指针 重复释放 → 程序崩溃 Java的自动垃圾回收: 程序员无需手动释放内存 JVM自动识别垃圾并回收 大幅减少内存管理错误 判断对象是否存活的两种算法 判断对象是否是垃圾,有两种主流算法: 引用计数算法(Reference Counting) 可达性分析算法(Reachability Analysis) 方法1:引用计数算法 核心思想 为每个对象添加一个引用计数器: 有引用指向对象时,计数器+1 引用失效时,计数器-1 计数器为0时,对象可被回收 示例 public class ReferenceCountingDemo { public static void main(String[] args) { Object obj = new Object(); // 计数器 = 1 Object obj2 = obj; // 计数器 = 2 obj = null; // 计数器 = 1 obj2 = null; // 计数器 = 0,可被回收 } } 引用计数变化: ...

2025-11-20 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...