上⾯提到的标记的算法,怎么标记⼀个对象是否存活?简单的通过引⽤计数法,给对象设置⼀个引⽤计数器,每当有⼀个地⽅引⽤他,就给计数器+1,反之则计数器-1,但是这个简单的算法⽆法解决循环引⽤的问题。
Java通过可达性分析算法来达到标记存活对象的⽬的,定义⼀系列的GC ROOT为起点,从起点开始向下开始搜索,搜索⾛过的路径称为引⽤链,当⼀个对象到GC ROOT没有任何引⽤链相连的话,则对象可以判定是可以被回收的。
⽽可以作为GC ROOT的对象包括:
1. 栈中引⽤的对象
2. 静态变量、常量引⽤的对象
3. 本地⽅法栈native⽅法引⽤的对象
网友评论