垃圾标记阶段--引用计数算法、可达性分析算法

前言:

对象存活判断

在垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有对死亡对象的标记才会被GC释放空间,因此这个过程可以称为垃圾标记阶段。

简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。

判断对象的存活一般有两种方式:引用计数算法可达性分析算法

一、引用计数算法(Java未使用)

1、原理:
引用计数算法,对每个对象保存一个整型的引用计数器属性。用于记录对象被引用的情况。

对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就 + 1;当引用失败时,引用计数器就 - 1。只要A的引用计数器的值为0,即表示对象A不可能再使用,可进行回收。

2、优点:实现简单、垃圾对象便于辨识;判定效率高,回收没有延迟性(为零就可以及时收集)。

3、缺点:
(1)它需要单独的字段存储计数器,这样增加了存储空间的开销
(2)每次赋值都需要更新计数器,伴随着加法和减法操作,增加了时间开销;

你可能感兴趣的:(Java虚拟机)