什么是垃圾
簡單來說,就是記憶體中已經不再被使用到的空間就是垃圾
要進行垃圾回收,要先判斷物件是否可以被回收
下面介紹幾種用來判斷是否垃圾的演算法
一、參考計數法(了解即可)
通過給物件添加計數器,每當有一個地方參考它,計數器值就 + 1,有一個地方參考失效就,計數器值就 - 1
只要計數器值為零,就說明這個物件不再被使用,可以當作垃圾回收
優點是 :實作簡單
缺點 : 1、每次對對物件的賦值是都要維護參考計數器,且計數器本身也有一定的損耗
2、解決不掉回圈參考的問題
二、列舉根節點做可達性分析 (根搜索路徑)
基本思路就是通過一系列名為”GC Roots“的物件作為起始點,向下搜索,如果一個物件到GC Roots沒有任何參考鏈相連時,則說明此物件不可用

Java中可作為GC Root的物件
1、虛擬機堆疊(堆疊幀中的區域變數表)中參考的物件
public void stack(){
/**
* 堆疊中區域變數表參考的物件
*/
Object gcRoots = new Object();
}
2、方法區中靜態屬性參考的物件
public class GCRoots {
private static Object object;
public static void staticDemo(){
/**
* 靜態屬性參考的物件
*/
object = new Object();
}
3、方法區中常量所參考的物件
private static final Object finalObject;
static {
/**
* 常量參考的物件
*/
finalObject = new Object();
}
4、本地方法堆疊JNI (native方法)參考的物件
可達性分析 就是從這些結點的集合(GC Root Set)開始遍歷,判斷物件是否可達,不可達就回收
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/247651.html
標籤:java
上一篇:藍橋杯第十二屆校內模擬賽(第二期)個人做題答案 僅供參考
下一篇:SpringBoot中AOP實作落地——Filter(過濾器)、Intercepter(攔截器)、Aspect(Spring AOP)
