zoukankan      html  css  js  c++  java
  • jvm-垃圾清除阶段的GC算法

    一:复制算法

      核心思想: 将内存空间一分为二,每次只是用其中一块,在垃圾回收时,将还存活的对象复制到另一块内存空间,原来的内存空间全部清除,

      然后交换两块内存的角色.

           

    二: 标记-清除算法

      当堆中的可用内存被耗尽时,就会停止整个应用程序(用户线程)[stop the world],然后进行两项工作;第一是标记,第二是清除

      1,标记: 收集器从根节点开始遍历,沿着引用链标记所有被引用的对象,一般是在对象的header中记录为可达对象

      2,清除: 收集器对堆内存从头到尾进行线性遍历,如果发现某个对象在其header中没有标记为可达对象,则将其回收.

      

      mark-sweep(标记清除算法的缺点和注意事项)

        执行效率不算高,产生内存碎片,维护一个空闲列表,增加了内存开销

      

      

    三:标记-整理(压缩)算法

      执行过程:

      1,第一阶段和标记-清除算法一样,从根节点标记所有引用的对象,

      2,第二阶段将所有存活的对象压缩到内存的一侧,按顺序排放(使用指针碰撞为新对象分配内存空间)

      3, 清理边界外的所有空间

      优缺点:

        优点:

          跟标记清除算法比: 没有内存碎片,新对象分配内存使用指针碰撞,不需要维护一个空闲列表

          跟复制算法比: 内存空间利用效率高

        缺点:

          效率上说,低于复制算法

          移动对象时,如果对象被其他对象引用,还需要调整引用的地址

          移动时必须停止所有用户线程(stop the world)

  • 相关阅读:
    腾讯其他人面经总结
    算法——(2)动态规划
    算法——(1)大数据算法
    算法总结
    今日头条其他人面经整理
    面试准备——(五)Jmeter
    我自己的面经
    JQuery实用技巧
    MVC图片验证
    10 个免费的Bootstrap Admin 主题,模板收集
  • 原文地址:https://www.cnblogs.com/alenblue/p/12923659.html
Copyright © 2011-2022 走看看