問十三 如果發現物件不可達,那麼它一定會「死」嗎?

2021-09-19 04:34:16 字數 689 閱讀 7412

可達性分析演算法中不可達的物件,並非是「非死不可」的,這時候它們暫時處於「緩刑」階段,要真正宣告乙個物件死亡,至少要經歷兩次標記過程

1、物件在進行可達性分析後被發現不可達,它將會被第一次標記並進行一次篩選,篩選的條件是此物件是否有必要執行finalize()方法當物件沒有覆蓋finalize()方法或者finalize()方法已經被jvm呼叫過,那麼就沒必要執行finalize()方法;如果被判定為有必要執行finalize()方法,那麼此物件將會放置在乙個叫做f-quenen的佇列之中,並在稍後由乙個虛擬機器自動建立的、低優先順序的finalize執行緒去觸發這個方法

2、稍後gc將對f-quenen中的物件進行第二次小規模的標記,如果物件要在finalize()中成功拯救自己——只要重新與引用鏈上的任何乙個物件建立關係即可,譬如把自己(this關鍵字)賦值給某個類變數或者物件的成員變數,那麼在第二次標記時它將被移出「即將**」集合;finalize()方法是物件逃脫死亡的最後一次機會,如果物件這時候還沒有成功逃脫,那他就會真的被**了。

Shell 十三問整理

組成 literal meta 就是一些字母單詞,組成命令的 特殊保留字元,對於shell有特殊意義 重點meta有分command meta和shell meta 舉例awk 1.txt 這裡 會被解釋成shell meta。awk 1.txt 中的 被解釋成command meta 常見meta...

awk十三問 AWK學習之旅

awk學習之旅 十三個常用命令行處理 root monitor awkdir cat emp.txt beth 4.00 0 dan 3.75 0 kathy 4.00 10 mark 5.00 20 mary 5.50 22 susie 4.25 18 1.不列印最後一列 awk begin nf...

Shell 十三問 的學習記錄

在 bbs上看到了shell十三問的帖子,由於比較就遠了,怕以後再也找不到了,就把筆記貼過來了,shell 十三問 貼出我做的筆記 一 為何叫做shell 使用者通過shell 作業系統即核心kernel的外殼 與kernel溝通,這是shell與kernel的命名的關係。從技術角度講,shell的...