1. 程式人生 > >java 垃圾回收之標記算法

java 垃圾回收之標記算法

執行 是否 本地方法棧 虛擬 垃圾回收機制 垃圾回收 main nbsp 循環引用

對象被判定為垃圾的標準

1、沒有被其他對象引用

判定對象是否為垃圾的算法

1、引用計數算法(不是主流垃圾回收機制)

  1.1 判定對象的引用數量

    1.1.1 通過判斷對象的引用數量來決定對象是否可以被回收

    1.1.2 每個對象實例都有一個引用計數器,被引用則+1,完成引用則-1

    1.1.3 任何引用計數為0的對象實例可以被當作垃圾收集

  優點:執行效率高,程序執行受影響較小

  缺點:無法檢測出循環引用的情況,導致內存泄漏(對象一直占用堆內存,沒被回收)

public class ReferenceCounterProblem {
    
public static void main(String[] args) { MyObject object1 = new MyObject(); MyObject object2 = new MyObject(); object1.childNode = object2; object2.childNode = object1; } }

2、可達性計數算法(主流)

通過判定對象的引用鏈是否可達來決定對象是否可以被回收

---》什麽可以作為GC Root的對象?

a.虛擬機棧中引用的對象(棧幀中的本地變量表)

b.方法區中的常量引用的對象

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

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

e.活躍線程的引用對象

java 垃圾回收之標記算法