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();
    }
}

  

猜你喜欢

转载自www.cnblogs.com/wjh123/p/11141497.html
今日推荐