有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (4) 个答案

  1. # 1 楼答案

    对象A1符合GC条件,因为现在它被设置为空。但由于字符串“bla”在GC中不可用,因为它也由a2引用。s、 因此,只有a1对象可用于GC

    如果是这样的话

    A a1 = new A();
    a1.s = "bla";
    A a2 = new A();
    a1 = null;
    

    然后a1对象和“bla”都可用于GC。因为“bla”的所有引用都被删除了,但现在情况是这样的

    a2.s = a1.s;
    

    a2指的是同一个字符串“bla”。所以字符串在stringpool中可用,而不是用于GC

  2. # 2 楼答案

    如果一个object持有另一个object的引用,并且当您设置容器对象的引用null时,子对象或包含的object将自动符合垃圾收集的条件

    详见this link

  3. # 3 楼答案

    在这里,您正在创建两个Object A的引用,比如a1a2

    首先,将a1的值赋值给a2。因此,在将值设置为a2之后,GC允许a1。但是{}不会有任何变化

    你也可以在这个博客上查看Garbage Collection

  4. # 4 楼答案

    由于A只有一个对s引用,a2.s指向a1.s不会影响a1的垃圾收集

    也就是说a1符合GC条件,但a2.s(或a1.s)所指的对象将不符合GC条件