引言
在 Java 技术体系里,垃圾收集器(GC)与内存分配策略是自动内存管理的核心支撑。深入探究其原理与机制,对优化程序内存性能、规避内存泄漏与溢出等问题意义重大,是理解 Java 运行时环境的关键环节。
GC 基础与核心问题
GC 概念溯源
垃圾收集技术并非 Java 首创,早在 1960 年,Lisp 语言已应用内存动态分配与垃圾收集。GC 需解决三个核心问题:
- 识别待回收内存:确定哪些对象已'死亡',即无被使用可能。
- 抉择回收时机:依据内存使用状况,选择合适时机触发回收。
- 选定回收方式:不同垃圾收集器采用各异的回收算法与实现逻辑。
对象存活判定算法
引用计数算法
原理为给对象绑定引用计数器,引用建立时计数器加 1,引用失效时减 1,计数器为 0 则判定对象可回收。但存在循环引用缺陷,如代码所示:
public class ReferenceCountingGC {
public Object instance = null;
private static final int _1MB = 1024 * 1024;
private byte[] bigSize = new byte[2 * _1MB];
public static void testGC() {
ReferenceCountingGC objA = new ReferenceCountingGC();
ReferenceCountingGC objB = new ReferenceCountingGC();
objA.instance = objB;
objB.instance = objA;
objA = null;
objB = ;
System.gc();
}
}



