美文网首页
gc常用算法

gc常用算法

作者: 策马踏清风 | 来源:发表于2020-06-30 18:14 被阅读0次

    标记清除

    标记清除主要分为两步

    1. 标记,标记需要清除的对象
    2. 清除,在内存中清除这些对象

    优点

    1. 速度快
    2. 清理之后存活对象的地址没变,所以不影响引用

    缺点

    1. 会造成内存碎片
      例如:清理了一个小对象,腾出一块小空间。当有大对象需要分配时因为空间太小就无法在此区域分配空间。
    2. 因为内存碎片导致内存不足及频繁gc

    复制算法

    1. 把空间分成两份同等大小的区域
    2. 只有一块区域存放对象,当此区域快要满了的时候把存活的对象放到另一个区域里
    3. 清除之前的区域

    优点

    1. 只搬运存活对象,速度也很快
    2. 不会产生内存碎片

    缺点

    1. 降低了内存使用率,实际只使用了一半内存

    标记整理

    1. 标记可回收对象
    2. 回收对象并腾出空间
    3. 对剩下存活的对象整理

    和标记清除对比

    1. 前两步一样,多了对于存活对象的整理

    优点

    1. 相对复制算法,节约空间
    2. 解决了标记清除的内存碎片问题

    缺点

    1. 效率比上面两个低

    实际使用

    jvm中年轻代采用的就是复制算法,因为年轻代中大部分对象是需要清空的,只用把少部分放到另一块内存即可
    老年代采用的是标记-整理算法

    相关文章

      网友评论

          本文标题:gc常用算法

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