多空间复制算法
典型的GC复制算法将堆空间劈成两半,利用一半存放对象另一半只能空着。多空间复制算法将空间继续细分,例如:分为10等份。这10等份里拿出两份做为FROM空间和TO空间,剩余8份利用标记-清除算法进行垃圾处理。这样,多空间复制算法浪费的空间只为堆空间的1/10。
我们直接上图来理解执行过程。
这里假设我们将空间分为4等份,一开是heap0作为TO空间,heap1作为FROM空间,其余是标记清除算法处理的空间。我们这里此时可以存放对象的空间是已满,于是启动多空间复试算法。算法中,对heap0和heap1j进行典型的复制算法对活动对象搬运,而heap2和heap3进行复制清除算法,再创建空闲链表把空闲连接,最后TO空间指向heap1而From空间指向heap2。于是处理结果如下图:
假设,过了一段时间后,对象又填满可利用的堆空间:
于是,我们启动多空间复制算法,类似的处理后如下图: