mark sweep:
标记阶段
标记阶段,要从GC ROOTS开始,遍历对象图(graph),对所有可达(reachable)的对象打上标记
标记的代码逻辑很简单,就是递归查找对象并标记
从上面的代码逻辑可以得出,标记阶段的耗时和堆大小无关,耗时和存活对象的数量成正比
清除阶段
清除阶段需要遍历全堆(这里是遍历free-list),清除所有没有标记的对象并回收对应的内存单元
copying:
复制
复制时,需从GC ROOTS开始遍历对象图,对每一个存活的对象进行复制;复制后对象地址改变,还需要更新GC ROOTS引用的地址;
mark compact
//TODO 使用c/c++在具体虚拟机中实现