JVM-基础知识学习记录(3)
基本垃圾回收算法
可以从不同角度去划分垃圾回收算法:
按垃圾回收策略划分如下:
1.引用计数法:
比较古老的回收算法,原理式如该对象有一个引用,即增加一个计数,删除一个引用,就减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法的最致命的缺点是无法处理循环引用问题。
2.标记-整理法:
此算法结合了“标记-清除”和“复制”两个算法的的优点,也是分为两个阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,把清除为标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放,此算法避免了标记-清除的碎片问题,同时避免复制算法的空间问题。
3.复制法:
此算法是把内存空间划分两个相等的区域,每次只使用其中一块区域,垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另一个区域,此算法每次只处理使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不会出现内存碎片,当然,此算法的缺点很明显,就是需要双倍的内存空间。
4.标记-清除法:
此算法执行分两个阶段,第一个阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把未被标记的对象清除。此算法需要暂停整个应用,同时,会产生内存碎片。
按分区类型划分如下:
1.分代回收:
基于对对象生命周期分析后得出的垃圾回收算法,把对象分为年青代,年老代,持久代,对不同生命周期的对象使用不同的算法(上述方式中的一个)进行回收,现在的垃圾回收器都使用此算法(从j2se1.2开始)
2,增量回收:
实时垃圾回收算法,即:在应用进行的同时进行垃圾回收,不知道什么原因jdk1.5中的收集器没有使用此算法。
按系统线程划分如下:
1.串行回收。
2.并行回收。
3并发回收。