实例化后删除对象的变量

时间:2017-09-14 05:50:00

标签: java object-construction

所以我有一个需要实例化某些变量的对象。这些变量通过对象数组传递给对象。然后,将数组中的每个元素分配给内部变量。

在分配内部变量并且从不再次引用数组之后,是否会对此数组进行垃圾回收,还是应该手动完成?

class MyObject () {
    public static Object [] values;
    public void setvalues(inputArray) {
        values = inputArray;
    }
}

内存非常重要,因为我需要创建几百个这些对象以及其余的代码。

2 个答案:

答案 0 :(得分:3)

阵列是否符合GC条件取决于以下条件:

  • 还有什么东西还引用了这个数组吗?

如果,你有这样的事情:

public class Foo {
    private int[] myArray = {1, 2, 3, 4};
    YourObject obj;

    public void someMethod() {
        obj = new YourObject(myArray);
    }
}

然后myArray不符合垃圾回收的条件,因为myArray对象中的变量Foo仍在引用它。然后,您可以将myArray设置为null,使其符合GC的条件。

如果myArray是局部变量,则:

public class Foo {
    YourObject obj;
    public void someMethod() {
        int[] myArray = {1, 2, 3, 4};
        obj = new YourObject(myArray);
    }
}

然后在someMethod返回后它符合GC的条件,因为到那时myArray将超出范围。

另外,请注意“符合GC条件”并不意味着“将立即收集”。这只是意味着GC有可能在将来收集它。具体什么时候?我们不知道。

答案 1 :(得分:0)

我假设你的代码看起来像这样

//Client class
o.setValues(arrayOfObjects);
//In the receiving object
public void setValues (Object[] objects){
 // Dostuff
}

arrayOfObjects要成为GC的候选者需要做两件事 -

  1. arrayOfObjects需要超出范围。 OR
  2. 需要为arrayOfObject分配另一个值或null
  3. 如果你真的关注内存,我会猜测它需要被垃圾收集的数组内容,而不是数组本身。接收对象将明确地引用内容,因此它们不会被垃圾回收。 希望这会有所帮助。