-
Finalizer類可以理解JVM爲JAVA語言提供的全局性對象釋放資源類(類似C語言的析構方法)。
-
Finalizer類有一個全局儲存Finalizer對象的ReferenceQueue和一個優先級較低的執行線程FinalizerThread。
-
Finalizer類以鏈表的形式將需要釋放資源的對象維護成Finalizer對象鏈。
-
實現了finalize方法的類被JVM標記爲f類,這種f類實例化對象時,JVM會調用Finalizer類的register方法,將f類對象包裹成Finalizer對象加入Finalizer鏈。
-
JVM會在GC時,判斷Finalizer對象包裹的f類對象是不是隻被Finalizer類引用,如果是,則將這個Finalizer對象加入ReferenceQueue。
-
FinalizerThread線程會從ReferenceQueue中取出Finalizer對象,將它從Finalizer對象鏈中移除,JVM執行f類對象的finalize方法。這之後,f類對象就可以在下次GC時被回收。
參考