java 中符合垃圾回收条件的对象

objects eligible for garbage collection in java

class Test
 {
  public static void main(String[] agrs)
   {


    String[] person = new String[20];

    String pername = "Peter";

    person[0] = pername;

    pername = null;

    System.out.println(person[0]);       // prints " Peter " on screen

    System.out.println(pername);       // no content in pername. prints " null "


   }

}

pername 对象是否符合垃圾回收条件?
我认为它符合条件,因为 person[0] 包含“Peter”并且 person[0] 不再引用 pername。

这里有点误会。 pernameperson[0] 只是对 String 对象的实际实例的引用。引用存在于堆栈中,并且将一直存在于堆栈中,直到它处于程序上下文中。除非两个引用都为空,否则不会对 String 实例进行 GC。

任何从 GC 根可达的对象都不能被垃圾回收。一个简单的 java 程序将具有以下 GC roots

  1. main方法中的局部变量
  2. 主线程
  3. 主要的静态变量class

您的案例属于第 1 类。

您可以阅读更多 - Java Memory Management