一、什麼是垃圾
內存中已經不再被使用到的空間就是垃圾
二、要進行垃圾回收,如何判斷一個對象是否可以被回收?
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回收。