实例化后删除对象的变量



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

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

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

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

数组是否符合 GC 条件取决于以下条件:

  • 还有什么引用数组吗?

如果,你有这样的东西:

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

然后myArray不符合垃圾回收的条件,因为Foo对象中的变量myArray仍在引用它。然后,您可以将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将来有可能收集它。究竟是什么时候?不知道。

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

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

arrayOfObjects需要做两件事才能成为GC的候选人 -

  1. arrayOfObjects需要超出范围。或
  2. 需要为数组对象分配另一个值或null

如果你真的关心内存,我推测需要垃圾回收的是数组的内容,而不是数组本身。接收对象将清楚地引用内容,因此它们不会被垃圾回收。 希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新