概述
还记得标记清除和复制算法的问题么? 堆使用效率低和碎片化问题. 那么有没有能够利用整个堆, 有没有内存碎片化问题的算法呢? 这就是标记压缩算法了....简单来说, 标记压缩算法就是将堆中的所有活动对象整体向左移, 将对象间的空隙消除.
在GC执行前的内存:
GC执行后的内存:
恩, 就是这么个意思.
实现
如何实现上面的操作呢?...而这, 也是标记压缩算法最大的问题了, 执行时间太久了, 标记清除对堆进行一次遍历, 而标记压缩要进行三次. 三倍的时间. 可想而知.
不过也有伟人说了, 算法没有好不好, 只有是否适合....这几种可达性的算法各有优劣吧.
标记压缩的衍生
Two-Finger算法
将堆的遍历次数减少到两次....(原谅我的无知)
其他
还有一些其他的表格算法、lmmixGC算法等, 因为这两个我看的似懂非懂, 就不细说了.
标记压缩算法差不多就这么些. 告辞~~~