Object的finalize方法
生活随笔
收集整理的這篇文章主要介紹了
Object的finalize方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、一次標記
首先finalize方法是在垃圾回收時,用于確認該對象是否確認被回收的一個標記過程。
確認一個對象真正被回收需要經歷兩次標記過程:
-
可達性分析沒有引用,這是第一次標記
是否有必要執行finalize方法,如果對象沒有重寫finalize方法或者finalize方法已經被調用過了,那么finalize方法就是沒有必要執行的,沒有必要執行finalize方法的對象就會被直接回收。如果對象被判定為有必要執行finalize()方法,那么這個對象將會放置在一個叫做F-Queue的隊列之中,并在稍后由一個由虛擬機創建、低優先級的finalizer線程去執行它。這里所謂的“執行”是指虛擬機會觸發這個方法,但并不承諾會等待它運行結束,這樣做的原因是,如果一個對象的finalize()執行緩慢,極端情況下死循環,那么就會導致F-Queue隊列中其他對象永久處于等待,甚至導致整個內存回收系統崩潰。 -
finalize()方法是對象逃脫死亡命運的最后一次機會,稍后GC將對F-Queue中的對象進行第二次小規模的標記,如果對象要在finalize()成功拯救自己——只需要重新與引用鏈上的任何一個對象建立關聯即可,譬如把this關鍵字賦值給某個類的變量或者對象的成員變量,那么第二次標記時它將會被移出“即將回收”的集合;如果對象這時還沒有逃脫,那么它就真正被回收了。
二、 總結
- finalize方法不是一定會執行,只有在該方法被重寫的時候才會執行 f
- inalize方法只會被執行一次
- 對象可以在finalize方法中獲得自救,避免自己被垃圾回收,同樣自救也只能一次
- 不推薦Java程序員調用該方法,因為finalize方法代價很大
總結
以上是生活随笔為你收集整理的Object的finalize方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年周边游数据报告
- 下一篇: 如何为你的数据选择最佳图表?