垃圾回收算法标记—清除 用可达性分析,先标记、再清除; 缺点: ①标记—清除之后会出现断断续续的空闲空间(内存碎片),空间无法高效利用, ②并且先标记后清除需要对堆空间前后两次遍历,效率不高; 复制算法 一开始,将堆空间内存分成两个部分A、B,只使用其中一部分,然后对A进行可达性分析,将可用的对象拷贝到另一个空间B去,再把A中的对象全部擦除,这样就把标记—清除算法的两个问题都解决了; 回收前: 回收后: 缺点:
①只使用一半堆空间,浪费一半的空间,
②如果对应的A那半部分出现极端情况(A全都是或大部分都是生命周期比较长的对象),那就需要全部拷贝); 标记—整理先标记、再整理,先可达性分析,标记对象是否可用,然后将可用对象向一端移动,这样垃圾回收之后的堆空间的剩余空间是连续的; 回收前: 缺点:
效率也不高,不仅要标记存活对象,还要整理所有存活对象的引用地址,在
效率上不如复制算法; 回收后:
|