我有三个数组变量
a[dynamic], b[dynamic], c[dynamic]
。它们可以是任何大小。我想销毁其中一个变量(例如 a
),因为我不会再使用该变量。
您可以通过向垃圾收集器分配
null
来向垃圾收集器指示可以释放该数组:
int[] a = new int[someSize];
int[] b = new int[someSize];
....
// I no longer need 'a'
a = null;
// ... but I can still use 'b'
不过,有几点需要注意:
这不会释放空间。相反,它使数组“合格”被垃圾收集器释放。 GC 可能很长时间都抽不出时间来释放它。
在现实的 Java 应用程序中执行此操作(清空变量)几乎没有任何意义。通常的做法是简单地允许变量在正常计算过程中超出范围
1null
一个变量(或对象字段或数组元素)。
在分配System.gc()
null
强制 GC 运行是非常不可取的……或者永远
2。如果电话有任何影响的话,费用可能会很高。最好让 JVM 在最佳时间安排 GC。
请注意,几乎任何东西都技术上
符合JLS要求......前提是GC不删除可到达的(即非垃圾)对象。其中包括使用 Epsilon no-op GC 的 JVM,它从不收集垃圾,并在空间不足时终止 JVM。2 - 唯一合法的理由是:1)测试 GC 相关功能的行为;例如终结器、引用队列处理器等,或 2) 避免实时应用程序中有害的 GC 暂停;例如在实时游戏中更改“级别”时运行 GC。
Stephen C 已经回答了你的问题,但对于非原始类型,你还想确保数组中的所有对象都被标记为 null(如果你不需要它),这将确保你没有内存泄漏。
for(Object obj : myObjectArray){
obj = null;
}
然后将数组引用设为空
myObjectArray = null;
如果,对于您的问题空间,变量只需要在一定范围的代码范围内,块可能对您有用,因为在块的末尾,任何“离开”范围的变量都被告知(最终)被垃圾收集器删除。
从 arrayList 中删除所有元素
arrayList.removeAll(arrayList);