java面試-什么是GC root


一、什么是垃圾

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

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

  • 引用計數法

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

  • 枚舉根節點做可達性分析

        通過一系列名為“GC Roots”的對象作為起始點,從“GC Roots”對象開始向下搜索,如果一個對象到“GC Roots”沒有任何引用鏈相連,說明此對象可以被回收。

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

  • 虛擬機棧中局部變量(也叫局部變量表)中引用的對象
  • 方法區中類的靜態變量、常量引用的對象
  • 本地方法棧中 JNI (Native方法)引用的對象 
public class GCRootDemo {
    private byte[] byteArray = new byte[100 * 1024 * 1024];

    private static GCRootDemo gc2;
    private static final GCRootDemo gc3 = new GCRootDemo();

    public static void m1(){
        GCRootDemo gc1 = new GCRootDemo();
        System.gc();
        System.out.println("第一次GC完成");
    }
    public static void main(String[] args) {
        m1();
    }
}  

 解釋:

gc1:是虛擬機棧中的局部變量

gc2:是方法區中類的靜態變量

gc3:是方法區中的常量

都可以作為GC Roots 的對象。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM