JVM-基础知识学习记录(3)

基本垃圾回收算法

可以从不同角度去划分垃圾回收算法:

按垃圾回收策略划分如下:

1.引用计数法:

比较古老的回收算法,原理式如该对象有一个引用,即增加一个计数,删除一个引用,就减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法的最致命的缺点是无法处理循环引用问题。

2.标记-整理法:

JVM-基础知识及概念--笔记(3)

此算法结合了“标记-清除”和“复制”两个算法的的优点,也是分为两个阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,把清除为标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放,此算法避免了标记-清除的碎片问题,同时避免复制算法的空间问题。


3.复制法:

JVM-基础知识及概念--笔记(3)

此算法是把内存空间划分两个相等的区域,每次只使用其中一块区域,垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另一个区域,此算法每次只处理使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不会出现内存碎片,当然,此算法的缺点很明显,就是需要双倍的内存空间。

4.标记-清除法:

JVM-基础知识及概念--笔记(3)

此算法执行分两个阶段,第一个阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未被标记的对象清除。此算法需要暂停整个应用,同时,会产生内存碎片。


按分区类型划分如下:

1.分代回收:

基于对对象生命周期分析后得出的垃圾回收算法,把对象分为年青代,年老代,持久代,对不同生命周期的对象使用不同的算法(上述方式中的一个)进行回收,现在的垃圾回收器都使用此算法(从j2se1.2开始)

2,增量回收:

实时垃圾回收算法,即:在应用进行的同时进行垃圾回收,不知道什么原因jdk1.5中的收集器没有使用此算法。

按系统线程划分如下:

1.串行回收。

2.并行回收。

3并发回收。



相关文章: