Java中的垃圾回收机制(Garbage Collection,GC)是Java虚拟机(JVM)用来自动管理内存分配和释放的一种机制。它主要负责识别并回收不再使用的对象,从而避免内存泄漏和内存溢出。以下是几种常见的垃圾回收算法:
-
引用计数算法:
- 每个对象维护一个引用计数,每当有引用指向该对象时,计数加一;当引用被移除时,计数减一。当引用计数为零时,对象被认为是垃圾,可以被回收。
- 缺点:无法处理循环引用问题。
-
标记-清除(Mark-Sweep):
- 算法分为两个阶段:标记阶段识别出哪些对象是垃圾;清除阶段回收这些垃圾对象。
- 缺点:存在内存碎片,且标记和清除过程可能造成应用程序的暂停。
-
复制算法(Copying Collector):
- 将内存分为两个相等的区域,每次只使用一个区域。垃圾回收时,将存活的对象复制到另一个区域,并清空当前区域。
- 优点:解决了内存碎片问题。
- 缺点:需要双倍内存空间,且存在复制开销。
-
标记-整理(Mark-Compact):
- 在标记-清除的基础上,增加了整理阶段,将存活的对象压缩到内存的一端,然后清理边界外的内存。
- 优点:解决了内存碎片问题。
- 缺点:整理过程需要移动对象,有性能开销。
-
分代收集算法: