Java源碼Finalizer類理解

  1. Finalizer類可以理解JVM爲JAVA語言提供的全局性對象釋放資源類(類似C語言的析構方法)。

  2. Finalizer類有一個全局儲存Finalizer對象的ReferenceQueue和一個優先級較低的執行線程FinalizerThread。

  3. Finalizer類以鏈表的形式將需要釋放資源的對象維護成Finalizer對象鏈。

  4. 實現了finalize方法的類被JVM標記爲f類,這種f類實例化對象時,JVM會調用Finalizer類的register方法,將f類對象包裹成Finalizer對象加入Finalizer鏈。

  5. JVM會在GC時,判斷Finalizer對象包裹的f類對象是不是隻被Finalizer類引用,如果是,則將這個Finalizer對象加入ReferenceQueue。

  6. FinalizerThread線程會從ReferenceQueue中取出Finalizer對象,將它從Finalizer對象鏈中移除,JVM執行f類對象的finalize方法。這之後,f類對象就可以在下次GC時被回收。

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章