Java 垃圾回收机制详解:原理、演示与最佳实践
什么是 Java 垃圾回收?
Java 的垃圾收集器(GC)自动管理内存,开发者无需手动释放。当对象没有活引用时,GC 回收其堆空间,防止内存泄漏导致应用崩溃。
Java 中对象通过 new 在堆上创建。运行时跟踪引用;当最后一个引用消失,对象即符合回收条件。GC 定期在后台运行,让代码更简洁安全。
与 C 语言需调用 free() 不同,Java 消除了悬空指针和未定义行为风险,增强可靠性和安全性。
所有 Java 对象都位于内存的 堆 区域——GC 扫描的区域。
实战演示:观察 GC 动作
步骤 1 – 复制代码到编辑器:
class Student {
int a;
int b;
public void setData(int c, int d) {
a = c;
b = d;
}
public void showData() {
System.out.println("Value of a = " + a);
System.out.println("Value of b = " + b);
}
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
s1.setData(1, 2);
s2.setData(3, 4);
s1.showData();
s2.showData();
// Student s3;
// s3 = s2;
// s3.showData();
// s2 = null;
// s3.showData();
// s3 = null;
// s3.showData();
}
}
步骤 2 – 编译运行。 初始创建两个 Student 对象和两个引用变量。参考下图。

步骤 3 – 取消注释第 20‑22 行,重新运行。 现在 s3 指向与 s2 同一对象。图示显示两个引用共享一个对象。

步骤 4 – 取消注释第 23‑24 行。 将 s2 设为 null,s3 仍引用该对象,对象依然存活。

步骤 5 – 取消注释第 25‑26 行。 s2 和 s3 均设为 null,对象符合 GC 条件。最终图示展示此状态。

让对象符合回收条件
- 将引用变量赋为
null。GC 运行时会回收内存。 - 基本类型(
int、double等)不是对象,不能为null。

注意:不建议显式使用终结器,应依赖 GC。
java
- 精通 Java 运算符:类型、语法与实战示例
- 精通 Java super 关键字:高级用法与实战示例
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- Java static 详解:静态变量、方法、代码块与实战示例
- Java 接口 vs 抽象类:如何选择合适的抽象方式
- Java 构造器重载详解:规则、链式调用与实战代码
- Java 集合框架完全指南:接口、实现、算法与最佳实践
- Java 10 垃圾收集器接口与 G1 并行 Full GC
- Java 10 堆分配增强:支持 NV-DIMM 等替代内存设备
- Java 9 集合工厂方法:一行代码创建不可变 List/Set/Map