垃圾回收(Garbage Collection,GC)算法是自动内存管理系统中用于回收不再使用的内存资源的一种算法。

常见的垃圾回收算法:

标记-清除算法(Mark and Sweep):

该算法分为两个阶段。首先,通过根对象(如全局变量、活动线程栈等)标记出所有可达对象。然后,在清除阶段,遍历堆中的所有对象,清除未被标记的对象并回收其内存空间。标记-清除算法的缺点是会产生内存碎片。

复制算法(Copying):

该算法将堆内存分为两个区域,通常称为”From”空间和”To”空间。在垃圾回收过程中,首先将所有存活的对象从”From”空间复制到”To”空间,然后清除”From”空间中的所有对象。复制算法的优点是简单高效,但会浪费一部分内存空间。

标记-压缩算法(Mark and Compact):

该算法结合了标记-清除算法和复制算法的思想。首先,通过标记过程标记出所有可达对象。然后,将存活的对象压缩到堆的一端,清除堆的另一端的所有对象。这样可以解决标记-清除算法产生的内存碎片问题。

分代算法(Generational):

该算法基于一个观察:大部分对象的生命周期都很短暂。根据这个观察,分代算法将堆内存分为多个代,通常是新生代和老年代。新生代用于存放新创建的对象,而老年代用于存放存活时间较长的对象。分代算法根据对象的年龄,采用不同的垃圾回收算法进行回收,通常新生代使用复制算法,老年代使用标记-清除或标记-压缩算法。