GC算法与种类

一、GC的概念
        Garbage Collection 垃圾收集。JVM的垃圾回收机制使开发者不必过多考虑内存的申请与释放,这样降低了软件开发的成本和语言的学习成本。

二、GC算法
(1)引用计数法 
        这是一个老牌垃圾回收算法,通过引用计算来回收垃圾。引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。

        问题:
        第一、引用和去引用伴随加法和减法,影响性能;
        第二、很难处理循环引用。所谓的循环引用,其实是死循环,比如Object1与Object2互为引用,我们知道如果采用引用计数法,Object1和Object2将不能被回收,因为他们的引用计数无法为零。

(2)标记-清除算法
        它是现代垃圾回收算法的思想基础。标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此,未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。总结就是: 标记存活的对象,然后把未标记的对象(垃圾对象)清除。
        问题:它的处理效率不高,会产生大量不连续的内存碎片。

(3)复制算法
        把内存空间划分为相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用的区域,把存活对象复制到另外一块survivor,然后把当前使用区域的剩余对象(垃圾对象)清除掉。
        它的复制成本比较小,而且也不会出去“碎片”问题。但缺点:就是需要两倍的内存空间。

 (4)标记-压缩算法
        标记-压缩算法适合用于存活对象较多的场合,如老年代。
         它结合了前2种算法的优点,分为2个阶段。第一阶段,标记出所有的存活对象;第二阶段,清除未标记的对象,并且把标记存活的对象“压缩”到堆的其中一块,按顺序排放。
        此算法避免了“标记-清除”的碎片问题,也避免了“复制”算法的空间问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值