垃圾回收算法和堆内存是Java虚拟机(JVM)中至关重要的组成部分。垃圾回收算法负责自动管理内存,以释放不再使用的对象,而堆内存则是用于存储对象实例的区域。本文将详细介绍JVM中不同的垃圾回收算法和堆内存的相关知识,并提供相应的源代码示例。
一、垃圾回收算法
- 标记-清除算法(Mark and Sweep)
标记-清除算法是一种经典的垃圾回收算法。它通过标记所有活动对象,然后清除未标记的对象来回收内存。以下是一个简单的标记-清除算法的示例代码:
// 标记阶段
void mark(Object obj) {
if (obj.isMarked()) return;
obj.mark();
for (Object ref : obj.getReferences()) {
mark(ref);
}
}
// 清除阶段
void sweep() {
for (Object obj : heap) {
if (!obj.isMarked()) {
heap.free(obj);
} else {
obj.unmark();
}
}
}
- 复制算法(Copying)
复制算法将堆内存划分为两个区域,每次只使用其中一个区域。当一个区域被填满后,将活动对象复制到另一个区域,然后清除当前区域中的所有对象。以下是一个简单的复制算法的示例代码&#x