垃圾回收(Garbage Collection,GC)是 Java 虚拟机管理内存的过程,其目标是识别并回收不再被程序引用的对象,释放内存空间以供其他对象使用。Java 虚拟机的垃圾回收流程通常包括以下步骤:
-
标记(Marking):
- 首先,垃圾回收器会从根对象开始,通过根对象的引用链逐步遍历可达对象,对这些对象进行标记。可达对象即程序可以通过引用访问到的对象。标记过程使用不同的算法,包括标记-清除算法、复制算法、标记-整理算法等。
-
清除(Sweeping):
- 在标记完成后,垃圾回收器会扫描堆内存中的所有对象,清除未被标记的对象。这些未被标记的对象被认为是不再被程序引用的垃圾,需要被回收。清除后,内存空间变得连续,可以更好地支持后续对象的分配。
-
回收(Compact):
- 在清除阶段后,有些垃圾回收器可能会执行额外的步骤,如内存压缩或整理。这是为了优化内存的布局,减少碎片化,使得内存分配更加高效。
-
处理引用(Reference Processing):
- 在标记和清除完成后,还需要处理引用。弱引用、软引用等特殊引用可能需要额外的处理,这通常包括将它们标记为不再被引用,并在之后的某个时刻将其回收。
-
Finalization(可选):
- 在清除垃圾之前,可以执行一些对象的 Finalize 操作。这是一种机会,让对象在被回收前执行一些清理工作。然而,Finalize 操作不是垃圾回收的主要部分,因为它不能保证在何时执行,甚至有可能不执行。
以上流程是一般垃圾回收器的基本流程,但不同的垃圾回收器可能采用不同的算法和策略,以满足不同应用场景的需求。例如,新生代和老年代的回收策略可能不同,不同的收集器有不同的特点和优劣势。
Was this helpful?
0 / 0