美文网首页
垃圾回收算法

垃圾回收算法

作者: whynotybb | 来源:发表于2019-01-12 17:34 被阅读0次

    标记-清除算法 

    是最基础的GC算法,其他算法都是基于此算法,并且改进其缺点。

    缺点:

    效率问题

    空间问题:标记清除之后会产生大量不连续的内存碎片。内存碎片可能会导致:当程序在以后的运行过程中,需要分配较大对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

    复制算法:为了解决效率问题,将可用内存安容量划分为代销相等的两块,每次只使用其中的一块,当这一块用完了,将存活的对象复制到另一块上,然后再把已使用过的内存空间一次清理掉。这样使得每次都是对其中一块进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况。只是复制算法将内存缩小为一半,代价太大。

    现在的商业虚拟机都采用这种收集算法来回收新生代。新生代对象98%都是朝生夕死的,所以并不需要按照1:1来划分内存空间,将内存划分为1块较大的Eden空间,和两个Survivor区,

    当回收时,将Eden和Survivor中还存活的对象一次性的拷贝到另一块Survivor区,最后清理掉Eden和刚才用过的Survivor区。HotSpot虚拟机默认的Eden和Survivor大小之比是8:1,也就是每次新生代中可用的内存空间是90%。

    复制算法当存活率高时不适用。比如老年代。

    分代收集算法:

    现代商业虚拟机垃圾回收算法都是采用分代回收算法,根据对象的存活周期的不同将内存划分为几块。一般是把Java堆分为新生代和老年代。

    分代收集算法

    相关文章

      网友评论

          本文标题:垃圾回收算法

          本文链接:https://www.haomeiwen.com/subject/yfycdqtx.html