假设我创建了一个最终由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
实例。 Foo
和someList
会成为GCd吗?
答案 0 :(得分:1)
你的术语很混乱。你完全没有问过GC课程。您正在询问有关包含实例的集合。在没有对它的引用之前,不会收集包含的实例,并且尽管存在,它仍然保持对它包含的任何内容的引用,因此它们也不能是GC-d。你把它带到了前面。
答案 1 :(得分:0)
您似乎在说Bar
引用的bar
实例可以从其他地方访问...因此它不符合垃圾回收的条件。
然后,您似乎询问这是否会影响Foo
实例和List<Double>
实例是否被垃圾收集。
Foo
实例在无法再访问时符合垃圾回收条件。 List<Double>
实例在无法再访问时符合垃圾回收条件。Bar
实例到其他两个实例没有路径,Bar
可达的事实并不能使其他两个对象可达。所以答案是否定的。它没有影响力。
可达性是通过跟随指针/参考前进而不是向后确定的。