亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JVM中判定對象需要回收的方法是什么

發布時間:2022-04-20 09:07:11 來源:億速云 閱讀:168 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“JVM中判定對象需要回收的方法是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“JVM中判定對象需要回收的方法是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

引用計數法

每個對象上都有一個引用計數,對象每被引用一次,引用計數器就+1,對象引用被釋放,引用計數器-1,直到對象的引用計數為0,對象就標識可以回收

這個可以用數據算法中的圖形表示,對象A-對象B-對象C 都有引用,所以不會被回收,對象B由于沒有被引用,沒有路徑可以達到對象B,對象B的引用計數就就是0,對象B就會被回收。

JVM中判定對象需要回收的方法是什么

但是這個算法有明顯的缺陷,對于循環引用的情況下,循環引用的對象就不會被回收。例如下圖:對象A,對象B 循環引用,沒有其他的對象引用A和B,則A和B 都不會被回收。

JVM中判定對象需要回收的方法是什么

root搜索算法

這種算法目前定義了幾個root,也就是這幾個對象是jvm虛擬機不會被回收的對象,所以這些對象引用的對象都是在使用中的對象,這些對象未使用的對象就是即將要被回收的對象。簡單就是說:如果對象能夠達到root,就不會被回收,如果對象不能夠達到root,就會被回收。

JVM中判定對象需要回收的方法是什么

被啟動類(bootstrap加載器)加載的類和創建的對象
jvm運行時方法區類靜態變量(static)引用的對象
jvm運行時方法去常量池引用的對象
jvm當前運行線程中的虛擬機棧變量表引用的對象
本地方法棧中(jni)引用的對象

JVM中判定對象需要回收的方法是什么

jvm在確定是否回收的對象的時候采用的是root搜索算法來實現。

補充:jvm判斷對象的回收

可達性分析算法

可達性分析算法:通過一系列“GC Roots”的根對象作為起始節點集,根據引用關系向下搜索,若某個對象到根對象無任何引用鏈相連,則此對象不可達。

但是可達性分析后為不可達的對象不是一定要回收,會經歷一個二次標記過程。

二次標記

1.如果對象在可達性分析后結果為不可達,則會被第一次標記。接著進行篩選,篩選條件為是否執行finalize()方法。

  • 若該對象未覆蓋finalize()方法,或finalize()已被調用過一次,則不需要執行finalize()方法。那么此對象判定為需要回收。

(對象的 finalize()方法只會被系統調用一次,下次回收該對象時, finalize()不會再執行)

  • 若該對象覆蓋了finalize()方法,且finalize()方法未被調用過,則需要執行finalize()方法。

2.若該對象需要執行finalize()方法,則該對象會被放置在一個F-Queue的隊列中,再由一個finalizer線程執行這些對象的finalize()方法。

3.接著收集器會堆F-Queue隊列的對象進行二次標記,若對象在finalize() 方法中未能逃脫,那么該對象會被二次標記,二次標記的對象判定為需要回收;

(對象可以在 finalize()方法中,將自己和引用鏈上的對象建立引用關系,這樣在第二次標記時,收集器會將其移出回收對象的集合,以此達到逃脫)

讀到這里,這篇“JVM中判定對象需要回收的方法是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

jvm
AI

昌乐县| 遵义县| 株洲县| 桐乡市| 神木县| 蒙自县| 全椒县| 沈阳市| 韩城市| 虹口区| 仁布县| 马公市| 来安县| 获嘉县| 江北区| 吉木萨尔县| 东宁县| 布拖县| 个旧市| 得荣县| 乐至县| 龙陵县| 准格尔旗| 桐庐县| 古浪县| 津南区| 普兰店市| 大安市| 兴国县| 扎鲁特旗| 门头沟区| 正镶白旗| 房产| 电白县| 临汾市| 中西区| 喜德县| 滦南县| 郑州市| 吉木乃县| 长垣县|