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
或person[0]
只是对String对象的实际实例的引用。引用生活在堆栈上,并且将一直存在于程序上下文中。除非两个引用都为null,否则不会对String实例进行GC。
从GC根目录可以访问的任何对象都不能被垃圾回收。一个简单的Java程序将具有以下GC根目录
主方法中的局部变量
主线程
主类的静态变量
您的案件属于第一类。
您可以阅读更多-Java Memory Management
关于java - Java中符合垃圾回收条件的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29326827/