使用可达性分析算法找出的不可达的对象,这些对象是不可用的,然后要判断他们是否死亡,至少需要经历两次标记过程。第一次标记时同时进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法,若是这些对象被判定有必要执行finalize()方法,那么这些对象将会被放置在一个F-queue的队列中,稍后GC将对这个队列中的对象进行第二次小规模的标记,这个时候,只要对象能重新与引用链上的任何一个对象建立关联,这些对象就能拯救自己,在第二次标记时他将被移除“即将回收”的集合,存活下来。
在第一次筛选时,若是这些对象没有必要执行finalize()方法,(当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,就被认为是没有必要执行finalize方法)。就会成为回收对象。
在第二次小规模标记时若是没能重新与引用链上的任一个对象建立关联,那这些对象就会成为回收对象。
重新与引用链上的对象建立关联(譬如把自己(this关键字)赋值给某一个类变量或者对象的成员变量)。