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。
这里有点误会。 pername
或 person[0]
只是对 String 对象的实际实例的引用。引用存在于堆栈中,并且将一直存在于堆栈中,直到它处于程序上下文中。除非两个引用都为空,否则不会对 String 实例进行 GC。
任何从 GC 根可达的对象都不能被垃圾回收。一个简单的 java 程序将具有以下 GC roots
- main方法中的局部变量
- 主线程
- 主要的静态变量class
您的案例属于第 1 类。
您可以阅读更多 - Java Memory Management
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。
这里有点误会。 pername
或 person[0]
只是对 String 对象的实际实例的引用。引用存在于堆栈中,并且将一直存在于堆栈中,直到它处于程序上下文中。除非两个引用都为空,否则不会对 String 实例进行 GC。
任何从 GC 根可达的对象都不能被垃圾回收。一个简单的 java 程序将具有以下 GC roots
- main方法中的局部变量
- 主线程
- 主要的静态变量class
您的案例属于第 1 类。
您可以阅读更多 - Java Memory Management