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]不再引用姓氏。

最佳答案

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

从GC根目录可以访问的任何对象都不能被垃圾回收。一个简单的Java程序将具有以下GC根目录


主方法中的局部变量
主线程
主类的静态变量


您的案件属于第一类。

您可以阅读更多-Java Memory Management

关于java - Java中符合垃圾回收条件的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29326827/

10-10 05:00