java
是自动管理内存的语言,需要知道对象是否存活已决定是否清理对象。
引用计数法
-
方式: 每当有一个地方引用对象,对象计数器
+1
,引用失效-1
- 判断方式: 计数不为0时存活,否则判断死亡
- 优点: 简单实现,高效判断
- 缺点: 如果对象相互引用,但是没有其它对象引用这两个。这两个对象会一直相互引用
引用链法
- 方式
- 可达性分析
- 第一次标记,筛选
- 第二次标记,筛选
- 可达性分析
- 一系列的
GC Roots
对象作为起点,向下搜索 -
GC Root
对象有: 虚拟机栈中的引用对象、JNI
引用对象、方法区中常量、类静态属性引用的对象。 -
GC Root
不可达代表对象不可用 - 不可达对象再经过两次标记筛选后才会加入优先级很低的销毁队列
- 第一次标记筛选
-
条件: 判断该对象是否有必要执行
finalize()
方法
需要执行(需要设置)则筛选出来进入下一次筛选
没必要则判定死亡,执行回收
- 第二次标记筛选
- 对象存放在
F-Queue
队列中,被一个自动建立,优先级低的Finalizer
线程去执行finalize()
。 -
finalize()
方法如果没有或者执行过一次,则视为没必要执行
网友评论