关闭

GC的三种方式

89人阅读 评论(0) 收藏 举报

标记清除方式

   

   

   

   

   

   

  1. 标记清除算法的时间耗费与存活对象总数对象总数相关(第一次扫描一次存活的对象,第二次扫描所有对象)
  2. 缺点:当对象总数大,存活对象少的时候,耗费时间多(清除阶段需要扫描所有对象)

   

   

   

   

   

复制收集方式

   

   

   

   

  1. 优点:存活对象少的时候,扫描对象少,复制对象少,新空间开销少
  2. 缺点:存活对象多的时候,扫描对象多 ,复制对象多,新空间开销多
  3. 优点:复制的过程整理内存,将关系较近的对象放在距离较近的 内存空间中,局部性高,内存缓存能有效运作

   

   

   

   

引用计数方式

   

   

   

   

  1. 优点:容易实现
  2. 优点:对象不被引用的瞬间就被释放
  3. 优点:释放操作针对每个对象个别执行,GC产生的中断时间比较短
  4. 缺点:无法释放循环引用的对象

   

   

************************************我是快乐的分割线***************************************************************

   

   

进一步改良的应用方式

   

   

分代回收

   

  1. 只扫描新生代的回收方式(小回收:Minor GC)
  • 从根(运行栈空间)开始扫描新生代,遇到老生代则停止扫描
  • 将扫描残留对象划分到老生代(复制收集算法就将复制的目标空间设置为老生代,标记清除算法则将对象标记为老生代)
  • 避免Minor GC清除掉被老生代对象引用的新生代对象,在老生代对象引用新生代对象的时候,使用记录集(表)记录引用,Minor GC的时候将记录集看做一个根

   

   

   

  1. 对老生代对象进行GC操作(完全回收(Full GC) 或者叫做大回收(Major GC) )

   

   

   

   

   

增量回收(Incremental GC)

   

  1. GC的过程是渐进的,回收过程中程序本身会继续运行
  2. 扫描后被标记为可回收的对象可能产生新的引用
  3. 当被标记对象产生新的引用时,使用写屏障的方式将此对象作为扫描的起始点(根)给记录下来
  4. 由于回收是渐进的,所以每次的GC时间较短
  5. 由于中断消耗时间,GC所消耗的总时间会增加

   

   

并行回收

   

  1. 在原有的程序运行的同时GC操作,与增量回收相同
  2. 让GC任务并行运行

       

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3946次
    • 积分:212
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论