Java面试宝典:JVM的垃圾收集算法
1. 垃圾收集算法概述
在Java虚拟机(JVM)中,垃圾收集(Garbage Collection, GC)是自动内存管理的核心机制。它负责自动回收不再被程序使用的对象所占用的内存空间,防止内存泄漏,确保应用程序的稳定运行。JVM提供了多种垃圾收集算法,每种算法都有其特定的应用场景和优缺点。本文将全面介绍JVM中的主要垃圾收集算法及其实现原理。
2. 标记-清除算法
2.1 算法原理
标记-清除(Mark-Sweep)算法是最基础的垃圾收集算法之一,它分为两个阶段:
第一步:标记阶段
- 从GC Roots(包括虚拟机栈中引用的对象、方法区中类静态属性引用的对象、方法区中常量引用的对象、本地方法栈中JNI引用的对象等)开始遍历对象图
- 对所有可达对象进行标记,识别出内存中需要回收的对象
- 标记过程通常使用可达性分析算法
第二步:清除阶段
- 遍历整个堆内存
- 清除掉所有未被标记的对象,释放其占用的内存空间
- 回收的内存被添加到空闲列表中,供后续分配使用
2.2 算法示意图
标记过程: