常用的垃圾回收方法有:
引用计数法、标记清除法、复制算法、标记压缩法、 分代算法、分区算法
引用计数法
思想:引用一个对象,则引用计数器+1;引用失效,则引用-1;回收计数为0的对象
缺点:(1)没法处理相互引用的对象(实际上这些对象需要被回收却没法回收,但是他们相互引用,计数不为0)(2)频繁的+1,-1对系统性能有影响
标记清除法
思想:标记阶段:标记从根节点开始的所有可达对象;清除阶段:清除所有未被标记的对象
缺点:产生空间碎片,回收后的空间是不连续的,造成之后的工作效率低
复制算法
思想:内存分2块,将正在使用的那块内存中存活的对象复制到另外未使用的内存的一边,清除其他对象(建立在存活对象少,垃圾多的前提)
优点:不产生空间碎片
缺点:内存折半
适用:复制算法比较适合新生代,因为垃圾对象通常多于存活对象(需要复制的存活对象少,成本低),效果好。
标记压缩法
思想:是一种老年代的回收算法,标记从根节点开始的所有可达对象,将存活的对象压缩到内存的一端,清除其他对象
优点:避免产生碎片和内存折半
分代算法
思想:根据每块内存区间选择以上合适的算法
分区算法
思想:根据对象生命周期长短划分两部分,将整个堆划分成连续的不同小区间
避免因为堆空间越大,GC停顿时间越长