java - java垃圾收集:对未引用对象的成员对象的引用
问题描述
假设我们有一个类:
public class test{
public String member;
public test()
{
member = new String("internal object");
}
};
如果我写这个:
String refToUnreferencedClassMember = new test().member;
这有问题吗?未引用的对象new test()
没有指向自身的引用,但是有一个指向它的成员对象的引用String member
。如果未引用的对象被垃圾回收,那么refToUnreferencedClassMember
将是无效的。
谢谢你的帮助。我不知道在这种情况下是否会进行垃圾收集。
解决方案
在这种特殊情况下,
new test().member;
将指向String
java堆空间中的一个对象。
现在,当您将其分配给
refToUnreferencedClassMember
那么该String
对象将有两个引用,即一个通过匿名 new test()
对象,另一个通过refToUnreferencedClassMember
.
请注意,测试对象将有资格获得 GC。并且当匿名new test()
对象被 GC 时,您的字符串对象仍然有一个引用,即 ie refToUnreferencedClassMember
,因此不允许它被 GC。