GC的概念
GC算法和种类_Java
如何选择释放堆空间,就和算法有关系了
GC算法
引用计数法
老牌垃圾回收算法
通过引用计算来回收垃圾
使用者
COM
ActionScript3
Python

引用计数法的问题
引用和去引用伴随加法和减法,影响性能
很难处理循环引用,导致垃圾对象的都不为1, 因此无法进行释放
标记清除
现代垃圾回收算法的思想基础. 分为两个阶段:标记阶段和清除阶段. 一种可行的实现是:在标记阶段,首先通过根阶段,标记所有从跟节点开始的可达对象.因此,未被标记的对象就是未被引用的垃圾对象.然后在清除阶段,清除所有未被标记的对象
GC算法和种类_Java_02

标记压缩
适合用于存活对象较多的场合,如老年代,它在标记-清除算法的基础上做了一些优化.和标记-清除算法一样,标记-压缩算法也首先需要从跟节点开始,对所有可达对象做一次标记.但之后, 它并不简单的清理未标记的对象,而是将所有的存活对象压缩到内存的一端.之后,清理边界外所有的空间
GC算法和种类_垃圾回收算法_03

标记压缩对标记清除有什么优势:1.解决内存碎片问题,避免分配大对象时,空间不足导致FullGC
复制算法
与标记-清除算法相比,复制算法是一种相对高效的回收方法
不适用与存活对象较多的场合, 如老年代
将原有的内存空间分为两块,每次只是使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收
可触及性
Stop-The-World