2

我有一个 MyClass

MyClass[] data;

设定长度:

data = new MyClass[1];

添加数据:

data[0] = new MyClass();

现在我需要清除数组。做这个的最好方式是什么?可以将 null 分配给该数组吗?

data=null;
4

5 回答 5

7

您是否希望数组仍然存在但其中没有任何内容?重新初始化数组:

data = new MyClass[1];

是不是想让数组不存在了,让JVM觉得喜欢的时候就可以收集垃圾了?然后data=null;如你所说。

如果您对同一个数组有多个引用并且想要删除所有元素:

Arrays.fill(data, null);
于 2013-09-13T13:17:03.753 回答
5

我不知道你在期待什么。一般来说,java 有自动垃圾收集。

Arrays.fill(myArray, null);
于 2013-09-13T13:20:56.237 回答
1

基本上你在 Java 中不需要它,你有自动垃圾收集。

有时,如果您使用Factories该存储静态数据,当然,您需要将其设置为null以防止将来额外使用

但是,如果您正在寻找其他方法,您可以尝试:

List<MyClass> data = new ArrayList<MyClass>(1);
data.add(new MyClass());
data.clear();
于 2013-09-13T13:16:50.063 回答
0

是的,您可以使用= null它,它会处理好事情。

一旦没有变量指向数据,垃圾收集器就会收集它,一切都会好起来的 :)

于 2013-09-13T13:17:43.073 回答
0

这取决于垃圾收集器如何处理它。你可以做两件事,行为和语义略有不同:

data[0] = null;

意味着数据仍将继续引用包含对 MyClass 的一个大小的引用列表的内存区域,仅在这种情况下,对 MyClass 的引用为空。垃圾收集器将收集之前分配的 MyClass 实例。

data = null;

但是,将完全删除提到的内存区域,垃圾收集器将收集引用列表和 MyClass 实例。因此,从内存的角度来看,如果您真的不打算使用相同的引用数组,那么第二个选项将提供最大的好处。

于 2013-09-13T13:24:29.070 回答