GC的三种方式

原创 2016年05月30日 21:46:38

标记清除方式

   

   

   

   

   

   

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

       

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

相关文章推荐

GC的三种方式,读RUBY之父写的《编程语言的过去、现在和未来》笔记

GC的三种方式,读RUBY之父写的《编程语言的过去、现在和未来》笔记HTTP://WWW.CPPBLOG.COM/TIANSHIDEBAIGU/ARCHIVE/2014/01/17/205450.HT...

垃圾回收(GC)的三种基本方式

垃圾回收(GC)的三种基本方式 垃圾(Garbage)就是程序需要回收的对象,如果一个对象不在被直接或间接地引用,那么这个对象就成为了「垃圾」,它占用的内存需要及时地释放,否则就会引起「内存泄露」。有...

GC 的三种基本实现方式

GC 的三种基本实现方式 本博客中的所有内容均摘自《代码的未来》(作者: [日] 松本行弘)——内存管理的p61-p70的内容(其中只有少部分的内容删减——不影响具体GC实现的讲解内容)。 ...
  • longzw0
  • longzw0
  • 2017年03月27日 13:46
  • 363

GC的三种方式,读RUBY之父写的《编程语言的过去、现在和未来》笔记

术语解释: 1.垃圾 所谓垃圾(Garbage),就是需要回收的对象。作为编写程序的人,是可以判断“这个变量已经不需要了”的,但是计算机做不到。因此,如果程序直接或间接的引用一个对象,那么这个对象就被...

GC 的三种基本实现方式的改良

参考资料《代码的未来》(作者: [日] 松本行弘)。 本文是真对《GC的三种基本实现方式》文章中所提到的三种基本实现方式的基础上进行优化改良的方案/原理讲解 由于并非本人原著(我只是个“搬运工“...
  • longzw0
  • longzw0
  • 2017年03月28日 21:25
  • 142

BM、GC、SGBM三种算法的比较和BM在OpenCV3下的参数设置

第一部分BM、GC和SGBM算法的性能比较转自:http://blog.csdn.net/chenyusiyuan/article/details/5967291,其中原博主推荐的Stefano Ma...

JVM基础 之三种GC大揭秘(转载)

(本文基于JDK6)   说到GC,首先要对Java 的内存模型有所了解。 Java 的内存模型各个代的默认排列有如下图(适用JDK1.4.*  到 JDK6): Java 的内存模型分...

JVM基础 之三种GC大揭秘

(本文基于JDK6)   说到GC,首先要对Java 的内存模型有所了解。 Java 的内存模型各个代的默认排列有如下图(适用JDK1.4.*  到 JDK6): Java 的内存模型分...

Android的三种网络通信方式.docx

  • 2015年03月12日 15:46
  • 183KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GC的三种方式
举报原因:
原因补充:

(最多只允许输入30个字)