JVM垃圾回收的時候如何確定垃圾?知道什麼是GC Roots嗎?

點擊上方“Coder編程”,選擇“置頂公衆號”

技術文章第一時間送達!

JVM垃圾回收的時候如何確定垃圾?知道什麼是GC Roots嗎?

每天進步一點,不做curd工程師

什麼是垃圾

簡單來說就是內存中已經不在被使用到的空間就是垃圾

要進行垃圾回收,如何判斷一個對象是否可以被回收?

  • 引用計數法

  • 枚舉根節點做可達性分析

爲了解決引用計數法的循環引用問題,Java 使用了可達性算法。

可達性算法

跟蹤收集器採用的爲集中式的管理方式,全局記錄對象之間的引用狀態,執行時從一些列GC Roots的對象做爲起點,從這些節點向下開始進行搜索所有的引用鏈,當一個對象到GC Roots 沒有任何引用鏈時,則證明此對象是不可用的。

圖中,對象Object6、Object7、Object8雖然互相引用,但他們的GC Roots是不可到達的,所以它們將會被判定爲是可回收的對象。

哪些對象可以作爲 GC Roots 的對象:

  • 虛擬機棧(棧幀中的局部變量區,也叫局部變量表)中引用的對象

  • 方法區中的類靜態屬性引用的對象

  • 方法去常量引用的對象

  • 本地方法棧中 JNI (Native方法)引用的對象

推薦

文末

歡迎關注個人微信公衆號:Coder編程
歡迎關注Coder編程公衆號,主要分享數據結構與算法、Java相關知識體系、框架知識及原理、Spring全家桶、微服務項目實戰、DevOps實踐之路、每日一篇互聯網大廠面試或筆試題以及PMP項目管理知識等。更多精彩內容正在路上~
新建了一個qq羣:315211365,歡迎大家進羣交流一起學習。謝謝了!也可以介紹給身邊有需要的朋友。

文章收錄至
Github: https://github.com/CoderMerlin/coder-programming
Gitee: https://gitee.com/573059382/coder-programming
歡迎關注並star~

微信公衆號

                    我知道你 “在看

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