当一个对象被取消引用但它的成员对象仍然被引用时会发生什么?

2023-11-29

class ClassA {
    ClassB mem1 = new ClassB();
    ClassB mem2 = new ClassB();
}

class ClassB {
}

public class Sample {
    public static void main(String[] args) {
        ClassA obj1 = new ClassA();
        ClassB obj2 = obj1.mem1;

        obj1 = null;

        obj2 = null;
    }
}

在上面的程序中,该行之后发生了什么:obj1 = null?

Is obj1即使其成员对象之一仍在被引用,也准备好进行垃圾回收了吗?


自动垃圾收集是查看堆内存、识别哪些对象正在使用、哪些未使用,并删除未使用的对象的过程。正在使用的对象或引用的对象意味着程序的某些部分仍然维护着指向该对象的指针。程序的任何部分都不再引用未使用的对象或未引用的对象。因此,未被引用的对象所使用的内存可以被回收。

Java 垃圾收集基础知识

在这种背景下,当obj1 = null;已处理,没有对该类型的对象的引用ClassA它指向哪个,因此它有资格进行垃圾收集。这ClassB目的,mem1但仍然有以下形式的参考obj2所以至少保留到该行obj2 = null;被执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当一个对象被取消引用但它的成员对象仍然被引用时会发生什么? 的相关文章

随机推荐