Java - 静态数组列表中对象的垃圾阵列列表字段



请看这个:

class MyUtility{
public static MyStock stock;
}
class MyStock{
public ArrayList<SomeThing> myListOfThings;
}

class SomeThing{
public ArrayList<WhatEver> myWhatever;
public double [] myArray;
}

所以我可以在任何地方访问MyUtility.stock(线程安全不是问题(

我知道GC不会清理"myListOfThings",我不在乎:这个列表是全局的和静态的,这是有充分理由的。

但是GC会清除"我的任何东西"吗?如果没有,如何强制/让它省略到?

我的意思是:如果在一个"SomeThing"的生活中,"myWhatever"数组列表大小变为123然后为0,或者myArray从新的双精度[123]变为空;

System.gc(( 让 JVM 知道你想要垃圾回收,但它不能保证它会发生。

当不再有指向对象的引用时,可以对对象进行垃圾回收。

您不能强制 GC 运行。

自动垃圾回收是查看堆内存的过程, 确定哪些对象正在使用中,哪些未使用,并删除 未使用的对象。使用中的对象或引用的对象表示 程序的某些部分仍然保持指向该的指针 对象。未使用的对象或未引用的对象不再是 由程序的任何部分引用。所以使用的内存 可以回收未引用的对象。

在像 C 这样的编程语言中,分配和解除分配 内存是一个手动过程。在 Java 中,释放内存的过程是 由垃圾回收器自动处理。 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

如果您希望GC能够清除使用的"myWhatever"的内存 然后你需要 OR 来清除列表:所以列表持有的任何对象(但在其他部分中未引用(都将被清除或使列表为 null,它将具有相同的效果。

myWhatever.clear();

myWhatever = null;

在第一种情况下,您仍将具有对空列表的引用,因此您不必重新创建它,在第二种情况下,您还将标记对符合 GC 条件的列表的引用。

最新更新