如果在其他地方使用其状态,Java垃圾收集是否会成为类

时间:2014-04-16 09:56:34

标签: java memory-management garbage-collection

假设我创建了一个最终由GCd创建的List<Double>。但是这次我将它放在Foo课程中,并附加Bar的实例。 Bar的构造函数中指定了Foo,稍后将在程序中使用该实例(即它不会是GCd)。

public class Foo {
    Bar bar;
    List<Double> someList;

    public Foo(Bar bar, List<Double> someList) {
        this.bar=bar;
        this.someList=someList;
    }
}

请注意,Foo实例永远不会再次使用 - 仅使用Bar实例。 FoosomeList会成为GCd吗?

2 个答案:

答案 0 :(得分:1)

你的术语很混乱。你完全没有问过GC课程。您正在询问有关包含实例的集合。在没有对它的引用之前,不会收集包含的实例,并且尽管存在,它仍然保持对它包含的任何内容的引用,因此它们也不能是GC-d。你把它带到了前面。

答案 1 :(得分:0)

您似乎在说Bar引用的bar实例可以从其他地方访问...因此它不符合垃圾回收的条件。

然后,您似乎询问这是否会影响Foo实例和List<Double>实例是否被垃圾收集。

  • Foo实例在无法再访问时符合垃圾回收条件。
  • List<Double>实例在无法再访问时符合垃圾回收条件。
  • 假设从Bar实例到其他两个实例没有路径,Bar可达的事实并不能使其他两个对象可达。

所以答案是否定的。它没有影响力。

可达性是通过跟随指针/参考前进而不是向后确定的。