哪些对象可以当作GC ROOT ?

一、从虚拟机的内存分区的角度来以下对象可以作为GC Root:

  1. 局部变量所引用的对象可以作为根对象。 例如 ArratList list = new ArrayList();
  2. 方法参数所引用的对象也可以作为根对象。
  3. 如果局部变量不再引用,那么就会被GC垃圾回收。
    例如:list = null;那么new ArrayList()就会被当作垃圾回收。

总结:

  1. 1.java虚拟机栈中的引用的对象。
    在这里插入图片描述

  2. 方法区中的类静态属性引用的对象。 (一般指被static修饰的对象,加载类的时候就加载到内存中。)
    在这里插入图片描述

  3. 方法区中的常量引用的对象。
    在这里插入图片描述

  4. 本地方法栈中的JNI(native方法)引用的对象

二、从程序运行的角度来说,一些在程序运行过程中始终保持存活,不死亡的对象可以作为GC Root,例如静态变量和常量所引用的对象等。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐