首页 > 解决方案 > java垃圾收集:对未引用对象的成员对象的引用

问题描述

假设我们有一个类:

public class test{
    public String member;
    public test()
    {
        member = new String("internal object");
    }
};

如果我写这个:

String refToUnreferencedClassMember = new test().member;

这有问题吗?未引用的对象new test()没有指向自身的引用,但是有一个指向它的成员对象的引用String member。如果未引用的对象被垃圾回收,那么refToUnreferencedClassMember将是无效的。

谢谢你的帮助。我不知道在这种情况下是否会进行垃圾收集。

标签: javagarbage-collection

解决方案


在这种特殊情况下,

new test().member;

将指向Stringjava堆空间中的一个对象。

现在,当您将其分配给

refToUnreferencedClassMember 

那么该String对象将有两个引用,即一个通过匿名 new test()对象,另一个通过refToUnreferencedClassMember.

请注意,测试对象将有资格获得 GC。并且当匿名new test()对象被 GC 时,您的字符串对象仍然有一个引用,即 ie refToUnreferencedClassMember,因此不允许它被 GC。


推荐阅读