垃圾回收(Garbage Collection, GC)是自动内存管理的关键部分,它负责识别并清除程序中不再使用的对象,从而避免内存泄漏和浪费。以下是垃圾回收中常见的几种算法的工作原理:
标记-清除(Mark-Sweep)
标记阶段:
- 从根集合(GC Roots)开始,遍历所有可达对象。根集合通常是栈中的局部变量、全局变量、静态变量等。
- 所有被引用的对象被标记为“存活”。
清除阶段:
- 完成标记后,GC将遍历整个堆内存,找出未被标记的对象。
- 未被标记的对象被认为是“垃圾”,GC将这些对象占用的内存清除,以便再次使用。
缺点:
- 标记和清除过程可能会造成应用程序的暂停。
- 清除后,内存会呈现碎片化,可能导致大对象无法找到足够连续的内存空间而被提前回收。
复制(Copying)
工作原理:
- 将堆内存分为两个相等的区域,称为“from”区和“to”区。
- 当“from”区的内存使用完时,GC开始工作,首先标记所有存活的对象。
- 然后,GC将“from”区的存活对象复制到“to”区,同时更新所有引用,使其指向“to”区中的对象副本。
- “from”区被清空,现在可以视为空闲内存,而“to”区则成为新的活动区&