Java垃圾回收机制

首先判断对象活动对象还是垃圾对象:

1.引用计数器算法

为每个对象添加一个引用计数器,每当有一处引用,计数器加一,每当一处引用失效,计数器减一

缺点:当两个对象相互引用,那么两个对象都无法回收

2.根搜索算法

从根对象开始,任何可以被触及的对象是活动对象,否则为垃圾对象

 

垃圾回收算法:

1.标记清除算法

使用根搜索算法标记要回收的对象,最后统一回收。

  • 效率不高
  • 会产生不连续的空间碎片

2.复制回收算法

将可用内存一分为二,当其中一份内存用满后,将当期存活的对象复制到另一份内存,并清除当期内存

  • 内存使用效率低

3.标记整理算法:

使用根搜索算法标记回收对象,将活动对象移动到内存一端,然后清除垃圾对象

4.分代回收算法:

分三代:新生代,老年代,持久代

  • 新生代分三份,每份都使用复制回收算法,当最后一份也满了,复制到老年代
  • 老年代使用标记整理算法
  • 持久代用来存储常量,静态

 

垃圾回收触发条件:

新生代写满,触发ScavengeGC,较频繁

老年代,持久代写满,显示调用System.GC();触发FullGC,不频繁

 

垃圾收集器:

Serial收集器:收集垃圾时,暂停其他线程,Client新生代默认收集器

ParNew收集器:Serial多线程版,Server新生代默认收集器

Parallel Scavenge收集器:多线程,复制算法,新生代收集器

Serial Old收集器:老年代收集器,单线程,标记整理算法

Parallel Old收集器:老年代收集器,多线程,标记整理算法

CMS收集器:老年代收集器,标记清除算法

  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清除

G1收集器:老年代收集器,标记整理算法

 

posted @ 2017-02-20 16:09  叫我什么大人  阅读(256)  评论(0编辑  收藏  举报