jvm疑难杂症

finalize()函数对垃圾回收的影响

finalize()函数是由FinalizerThread线程处理的。每一个即将被回收并且包含finalize()函数的对象都将在正式回收之前加入FinalizerThread的执行队列,该队列为java.lang.ref.ReferenceQueue引用队列,内部实现为链表结构,队列中每一项都为java.lang.ref.Finalizer引用,它本质为一个引用。Finalizer内部封装了实际的回收对象。由于对象在回收前被Finalizer的referent字段进行“强引用”,并加入了FinalizerThread的执行队列,这意味着对象又变为可达对象,因此阻止了对象的正常回收。由于在引用队列中的元素排队执行finalize()函数,一旦出现性能问题,将导致这些垃圾对象长时间堆积在内存中,可能会导致OOM。

 

 

 

 

 

 

Guess you like

Origin blog.csdn.net/hdsHDS6/article/details/115636689
JVM
JVM