Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果Java垃圾收集的状态在别处使用,它会成为一个类吗_Java_Memory Management_Garbage Collection - Fatal编程技术网

如果Java垃圾收集的状态在别处使用,它会成为一个类吗

如果Java垃圾收集的状态在别处使用,它会成为一个类吗,java,memory-management,garbage-collection,Java,Memory Management,Garbage Collection,假设我创建了一个列表,它最终将由GCd生成。不过这次我把它放在一个类Foo中,旁边是Bar的一个实例Bar在Foo的构造函数中指定,该实例将稍后在程序中使用(即,它不会是GCd) 公共类Foo{ 酒吧; 列出一些清单; 公共Foo(酒吧、列表){ 这个.bar=bar; this.someList=someList; } } 请注意,Foo实例将不再使用——只使用Bar实例。Foo和someList是否为GCd?您的术语非常混乱。你根本不是在问GC类。您询问的是包含实例的集合。包含实例只有在没

假设我创建了一个
列表
,它最终将由GCd生成。不过这次我把它放在一个类
Foo
中,旁边是
Bar
的一个实例
Bar
Foo
的构造函数中指定,该实例将稍后在程序中使用(即,它不会是GCd)

公共类Foo{
酒吧;
列出一些清单;
公共Foo(酒吧、列表){
这个.bar=bar;
this.someList=someList;
}
}

请注意,
Foo
实例将不再使用——只使用
Bar
实例。
Foo
someList
是否为GCd?

您的术语非常混乱。你根本不是在问GC类。您询问的是包含实例的集合。包含实例只有在没有对它的引用时才会被收集,并且,尽管有引用,它仍然维护自己对它所包含的任何内容的引用,因此它们也不能是GC-d。你把它放在后面。

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

然后,您似乎会问这是否会影响
Foo
实例和
List
实例是否被垃圾收集/何时被垃圾收集

  • Foo
    实例不再可访问时将有资格进行垃圾收集
  • 列表
    实例不再可访问时有资格进行垃圾收集
  • 假设从
    实例到其他两个实例没有路径,那么
    是可访问的,这一事实不会使其他两个对象可访问
所以答案是否定的,它没有影响


可达性是通过跟随指针/引用来确定的。。。不向后。

如果bar位于foo的方法中,并且将被使用,这是否意味着您必须调用foo.someMethod();?在这种情况下,将使用foo。将收集从GC根目录无法访问的任何对象,因此在您的情况下,
foo
List
的实例都可以被引用collected@Pphoenix不,
bar
也在其他对象中,并在那里使用(而不是在任何
Foo
实例中)。
public class Foo {
    Bar bar;
    List<Double> someList;

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