什么是GC算法?有哪些GC算法?

GC算法指垃圾回收算法,是自动内存管理的一种方式。它的主要目的是回收未使用的内存,释放内存空间以供后续使用。
主要的GC算法有:

  1. 引用计数算法:给每个对象添加一个引用计数器,当有一个地方引用它时,计数器值加1;当引用失效时,计数器值减1;计数器值为0时回收对象。优点是实现简单,缺点是无法回收循环引用的对象。
  2. 标记-清除算法:先标记全部对象,然后清除未标记的对象。优点是可以回收循环引用的对象,缺点是效率低下,会产生大量内存碎片。
  3. 复制算法:将内存划分为大小相等的两块,每次只使用其中的一块。当一块内存用完了,就将还活着的对象复制到另一块上,然后清理已使用的内存。优点是简单高效,没有内存碎片,缺点是浪费一半的空间。
  4. 分代算法:根据对象生存周期的不同,将内存划分为新生代和老生代。新生代采用复制算法,老生代采用标记-清除或标记-整理算法。这种算法综合了各算法的优点,是现代虚拟机采用的主流算法。
  5. 标记-整理算法:先标记全部对象,移动未标记对象,然后清理末端内存使之连续。优点是避免了内存碎片,缺点是对象移动代价高。

除此之外,还有增量式GC算法等。不同的GC算法之间都是有利弊权衡的,虚拟机会根据实际情况选择合适的算法或组合使用多种算法。