【428、可达性分析里哪些对象可以作为gc root】

429 阅读1分钟

在可达性分析中,以下对象可以作为GC Root:

  1. 虚拟机栈中引用的对象:虚拟机栈是线程私有的,它包含了局部变量和正在执行的方法的引用。因此,在虚拟机栈中引用的对象都是活跃的对象,可以作为GC Root。
  2. 方法区中类静态属性引用的对象:类的静态属性在方法区中存储,如果静态属性引用了某个对象,那么该对象就可以被认为是活跃的对象。
  3. 方法区中常量引用的对象:方法区中的常量池是一种特殊的内存区域,用于存储字符串、数字和类名等常量。如果常量池中的常量引用了某个对象,那么该对象就可以被认为是活跃的对象。
  4. 本地方法栈中JNI(Java Native Interface)引用的对象:JNI允许Java代码调用本地代码(如C或C++)。本地方法栈是JNI使用的栈,它包含了JNI引用的本地对象。

除了上述对象,还有一些特殊的对象可以作为GC Root:

  1. 虚拟机内部的一些全局引用:例如常驻的异常对象、系统类加载器等。
  2. 所有被锁定的对象:锁定的对象不能被垃圾回收器回收,因此它们必须被认为是活跃的对象。

请注意,这只是一个基本列表,不同的垃圾回收器和虚拟机实现可能会有不同的规则和要求。