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的三种方式

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

4种GC方法+分代回收+触发GC情况+内存申请过程

①引用计数 对象增加一个引用时,引用数+1。减少一个时,引用数-1。当进行垃圾回收时,只回收引用数为0的对象。面对互相引用无解,方法比较老,基本弃用 ②标记+清除 从根节点遍历标记对象,然后遍历整...
  • sinat_25233885
  • sinat_25233885
  • 2016年12月22日 17:17
  • 1067

GC 的三种基本实现方式

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

java 中的gc的几种方式及各个方式使用的收集算法

Gc module New generation  Old generation -XX:+UseSerialGC 串行gc Mark-swe...
  • qingcompany
  • qingcompany
  • 2016年11月30日 11:04
  • 1724

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

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

Hotspot的三种GC算法

JVM内存分代图示              Serial Collector 是JVM在client模式下的默认GC方式,通过JVM参数 -XX:UseSerialGC 来指定。 ...
  • wdqqmms00544kiss
  • wdqqmms00544kiss
  • 2016年05月30日 21:47
  • 323

JDK7的5种GC类型

SerialGC ParallelGC ParallelOld GC (Parallel Compacting GC) ConcurrentMark & Sweep GC  (or “CMS”)...
  • dfsaggsd
  • dfsaggsd
  • 2016年03月17日 09:56
  • 2858

JVM中的GC回收分析

1.GC垃圾回收算法 1、三种垃圾回收算法 标记-清除(年老代)标记-整理(即标记-压缩)(年老代)复制(年轻代) 1.1、标记-清除算法 原理: 从根集合节...
  • he90227
  • he90227
  • 2016年08月06日 14:13
  • 2069

Java垃圾收集器(GC)简介与最佳组合探究

Java经过近20年的演变,已经发展出一套复杂、健壮和高性能的垃圾收集器。在不同的应用场合下使用不同的GC组合能让程序性能得到可观提高。我想这也是Java这么多年来一直处于不败之地的原因之一。以下讨论...
  • tracker_w
  • tracker_w
  • 2015年04月18日 02:47
  • 1927

GC详解及Minor GC和Full GC触发条件总结

GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用。即:从gcroot开始...
  • u012767369
  • u012767369
  • 2017年02月10日 09:26
  • 926
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GC的三种方式
举报原因:
原因补充:

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