故世的目的

对象死亡

  在从前的
Java内存区域随笔中早已了然几乎拥有Java对象实例都存放在堆中,GC对堆举行回收此前先是判断什么对象已经“死亡”。那么问题来了,怎么着确定一个对象是不是业已溘然长逝呢?
  判断目的是否曾经去世有引用计数算法和可达性分析算法

引用计数算法(Reference Counting)

  给目的中添加一个引用计数器,当每有一个地点使用它时,计数器值加1;当引用失效时,计数器值减1;任何时刻计数器为0的靶子就是不容许被利用(死亡处境)。这多少个计数算法实现简单,判断功能也高,不过出现多个实例互相引用并且没有其他地点引用这六个对象的意况,那么这多个目的实际已经是已故意况,不过总计器的值不为0,存在误判的,会招致内存溢出。哈哈,是不是认为这一个艺术忽悠人的。

可达性分析算法(Reachability Analysis)

  现在jvm就是通过可达性分析来判断目标是否存活的。基本思路是由此一密密麻麻称为“GC
Roots”的靶子作为开头点,从这么些点起来向下搜寻,搜索所通过的门径称为引用链,当一个对象到GC
Roots没有此外引用链相连时,讲明此目的是不可用的(死亡情形)。如下图:object
5、object 6、object 7尽管相互关系,不过它们到GC Roots
是不可达的,所以它们被判定为是可回收的对象。
图片 1

相关文章