GC Roots定義

一、什麼是垃圾

內存中已經不再被使用到的空間就是垃圾

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

1.引用計數法

很難解決對象之間的循環引用問題

2.枚舉根節點做可達性分析

java jvm的官方實現版本是HotSpot,他的GC回收是通過可達性算法實現的,而不是通過引用計數器算法。
所謂的可達性就是從若干個GC Roots 出發,能被直接或間接的引用到的,都稱爲“可達的”(reachable)。通過一系列名爲“GC Roots”的對象作爲起始點,從“GC Roots”對象開始向下搜索,如果一個對象到“GC Roots”沒有任何引用鏈相連,說明此對象可以被回收。

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

GC管理的主要區域是Java堆,一般情況下只針對堆進行垃圾回收。方法區、棧和本地方法區不被GC所管理,因而選擇這些區域內的對象作爲GC roots,被GC roots引用的對象不被GC回收。

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