copy GC 和 mark & compaction GC的算法异同

copy GC是,对所有child子节点,判断,

如果child没有被访问过,那么拷贝到新地址,child的forwording指向新地址,child标记为已访问,把自己对child的引用改为对新地址的引用。

如果child已经被访问过,那么直接将对child的引用改为对child的forwording的引用,也就是对新地址的引用。

m&c跟前者的区别是:并不是在另一块新内存上分配,而是在原有的内存分配,所以要先对最前面的存活对象进行分配,以保证不会被后来的覆盖,所以不能像copyGC那样图遍历一次搞定。

过程是

从root开始标记存活对象

从内存地址最靠前的对象开始,根据大小,确定其地址

从root开始,将对象对child的引用更改为新分配的地址

从内存地址最靠前的对象开始,移动对象

可以看出要遍历多次,而不是copyGC的遍历一次

所以复制整理算法,比起copy算法,效率要低,吞吐量小。但是经过一次复制之后,还能存活的(比如A)在第二次就不需要再移动,而且不像copyGC需要担保什么的,空间利用率变高。

原文地址:https://www.cnblogs.com/chuliang/p/8689418.html