java - 如何垃圾收集对象数组?

标签 java arrays object memory garbage-collection

我正在使用 Java 编写大型程序,现在我试图避免闲逛以提高它的内存使用率,我在构造函数中实例化了一些对象,并一直实例化到程序结束,但它们并不总是被使用.我的问题专门针对对象的垃圾收集数组。

例如,当用户按下一个菜单项时,会调用一个 JDialog,其中包含许多组件,这些组件在程序运行时被实例化,但我想在必要时实例化它们,在不需要时释放它们。

例如:

JRadioButton Options = new JRadioButton[20];
for (int i = 0; i < 20; i++) {
    Options[i] = new JRadioButton(Labels[i]);
}

如果我想释放数组,我应该怎么做?

这个:

for (int i = 0; i < 20; i++) {
    Options[i] = null;
    Labels[i] = null;
}

或者简单地说:

Options = null;
Labels = null;

提前致谢

最佳答案

首先,Java 对象只有在不可访问时才会被垃圾回收(并且它可能有除您的数组之外的其他引用)。然后 GC 在几乎不可预测的时间运行(因此内存可能会在很久以后被释放)。

清除数组的元素不会释放整个数组,但可以释放每个元素(前提是它变得不可访问)。

将变量设置为 null 可能会释放数组(当然还有所有元素)。

但对于这么小的程序,GC 可能永远不会发生。

至少阅读GC on wikipedia ,也许还有 GC handbook

请注意,某些对象的 Activity 性是整个程序属性(实际上是整个过程属性:值的 Activity 性与特定执行相关,而不是与您的源代码相关)。换句话说,您可以执行 Options = null; 并且仍然可以通过其他引用路径访问 Options[24] 中的对象。

关于java - 如何垃圾收集对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12880168/

相关文章:

java - 是否可以编写测试事务代码的事务单元测试?

java - 双曲曲面分割 Java 库

java - Android Studio 不会在 Windows 10 上启动

javascript - 关于 JS 中 OOP 的一些基本问题

java - Android 中的本地化

javascript - 需要使这个对象数组在 javaScript 中可重用

Java 创建未知大小的名册

javascript - 如何将此mysql select return转换为一个数组

Javascript 对象和 jQuery AJAX

Java:可以使用单个 for 循环而不是两个吗?