龙空技术网

java垃圾回收算法,引用计数法及标记清除

大熊小复 47

前言:

此刻同学们对“标记清除算法效率”都比较注重,你们都想要分析一些“标记清除算法效率”的相关资讯。那么小编也在网络上网罗了一些关于“标记清除算法效率””的相关知识,希望姐妹们能喜欢,我们快快来了解一下吧!

(1)垃圾回收算法:引用计数法

对象是否存活判断 1 堆中每个对象实例都有一个引用计数,

2 当创建一个对象时,且将该对象实例分配给一个变量,该变量计数设置为1。

3 当其他变量被赋值为这个对象的引用时,计数加1 (a=b则引用的对象实例的计数+1),

4 但当一个对象实例的某个引用超过了生命周期或被设置为一个新值时,对象实例的引用计数减1,

5 任何引用计数器为0的对象实例可以被当作垃圾收集,

6 当一个对象实例被垃圾收集时,它引用的任何对象实例的引用计数器减1

优 引用计数收集器可以很快的执行,交织在程序运行中。对程序需要不被长时间打断的实时环境比较有利

缺 无法检测出循环引用。如父对象有一个对子对象的引用,子对象反过来引用父对象。这样它们的引用计数永远不为0

(2)垃圾回收算法:标记清除

最基础的收集算法是"标记-清除"Mark-Sweep算法,分为标记和清除两个阶段

1 首先标出所有需要回收的对象,标记完成后统一回收

2 它的主要不足有两个

一 效率问题,标记和清除两个过程的效率不高

二 空间问题,标记清除之后会产生(1)大量不连续的内存碎片

(2)空间碎片太多可能会导致以后分配较大的对象时,

(3)无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作

标签: #标记清除算法效率