GC的三种方式

标记清除方式

   

   

   

   

   

   

  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任务并行运行

       

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值