九:jvm垃圾的確定與GC ROOT對象

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

  • 什麼是垃圾
    • 簡單來說就是內存中已經不在被使用到的空間就是垃圾
  • 要進行垃圾回收,如何判斷一個對象是否可以被回收?
    • 引用計數法
    • 枚舉根節點做可達性分析

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

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

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

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

  • 虛擬機棧(棧幀中的局部變量區,也叫局部變量表)中引用的對象
  • 方法區中的類靜態屬性引用的對象
  • 方法區常量引用的對象
  • 本地方法棧中 JNI (Native方法)引用的對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章