标记清除方式
- 标记清除算法的时间耗费与存活对象总数和对象总数相关(第一次扫描一次存活的对象,第二次扫描所有对象)
- 缺点:当对象总数大,存活对象少的时候,耗费时间多(清除阶段需要扫描所有对象)
复制收集方式
- 优点:存活对象少的时候,扫描对象少,复制对象少,新空间开销少
- 缺点:存活对象多的时候,扫描对象多 ,复制对象多,新空间开销多
- 优点:复制的过程整理内存,将关系较近的对象放在距离较近的 内存空间中,局部性高,内存缓存能有效运作
引用计数方式
- 优点:容易实现
- 优点:对象不被引用的瞬间就被释放
- 优点:释放操作针对每个对象个别执行,GC产生的中断时间比较短
- 缺点:无法释放循环引用的对象
************************************我是快乐的分割线***************************************************************
进一步改良的应用方式
分代回收
- 只扫描新生代的回收方式(小回收:Minor GC)
- 从根(运行栈空间)开始扫描新生代,遇到老生代则停止扫描
- 将扫描残留对象划分到老生代(复制收集算法就将复制的目标空间设置为老生代,标记清除算法则将对象标记为老生代)
- 避免Minor GC清除掉被老生代对象引用的新生代对象,在老生代对象引用新生代对象的时候,使用记录集(表)记录引用,Minor GC的时候将记录集看做一个根
- 对老生代对象进行GC操作(完全回收(Full GC) 或者叫做大回收(Major GC) )
增量回收(Incremental GC)
- GC的过程是渐进的,回收过程中程序本身会继续运行
- 扫描后被标记为可回收的对象可能产生新的引用
- 当被标记对象产生新的引用时,使用写屏障的方式将此对象作为扫描的起始点(根)给记录下来
- 由于回收是渐进的,所以每次的GC时间较短
- 由于中断消耗时间,GC所消耗的总时间会增加
并行回收
- 在原有的程序运行的同时GC操作,与增量回收相同
-
让GC任务并行运行