• 垃圾回收算法有几种类型? 他们对应的优缺点又是什么?


    常见的垃圾回收算法有:

    标记-清除算法、复制算法、标记-整理算法、分代收集算法

    标记-清除算法

    标记—清除算法包括两个阶段:“标记”和“清除”。 标记阶段:确定所有要回收的对象,并做标记。 清除阶段:将标记阶段确定不可用的对象清除。

    缺点:

    标记和清除的效率都不高。
    会产生大量的碎片,而导致频繁的回收。

    复制算法

    内存分成大小相等的两块,每次使用其中一块,当垃圾回收的时候, 把存活的对象复制到另一块上,然后把这块内存整个清理掉。

    缺点:

    需要浪费额外的内存作为复制区。
    当存活率较高时,复制算法效率会下降。

    标记-整理算法

    标记—整理算法不是把存活对象复制到另一块内存,而是把存活对象往内存的一端移动,然后直接回收边界以外的内存。

    缺点: 算法复杂度大,执行步骤较多

    分代收集算法

    目前大部分 JVM 的垃圾收集器采用的算法。根据对象存活的生命周期将内存划分为若干个不同的区域。一般情况下将堆区划分为新生代( Young Generation 和老年代( Tenured Generation ),永久代( Permanet Generation )。

    老年代的特点是每次垃圾收集时只有少量对象需要被回收,而新生代的特点是每次垃圾回收时都有大量的对象需要被回收,那么就可以根据不同代的特点采取最适合的收集算法。

    Young:存放新创建的对象,对象生命周期非常短,几乎用完可以立即回收,也叫 Eden 区。

    Tenured: young 区多次回收后存活下来的对象将被移到 tenured 区,也叫 old 区。

    Perm:永久带,主要存加载的类信息,生命周期长,几乎不会被回收。

    缺点: 算法复杂度大,执行步骤较多。

    本文由博客群发一文多发等运营工具平台 OpenWrite 发布

  • 相关阅读:
    rpm
    java 锁4
    java 锁3
    小技巧:在线生成按钮Shape的网站
    Python入门:内置函数
    山东理工大学SDUT
    Android项目实战(四十):Andoird 7.0+ 安装APK适配
    Android打赏功能:支付宝转账
    浅谈Android数据库DBFlow
    acffo的开源项目汇总
  • 原文地址:https://www.cnblogs.com/javago/p/14427926.html
Copyright © 2020-2023  润新知