将新数组分配给现有数组以在Java中"清除"数组是不好的做法?

Yux*_*xie 6 java arrays big-o

所以我目前正在开发一个程序,它需要能够处理存储在数组中的大量数据,并且需要一种方法来清除数组中的所有内容.对于下面的例子,做记忆明智会是一件坏事吗?我知道垃圾收集器最终会为你清理它,但有没有理由为什么另一个方法(例如for循环并将每个值设置为null)可能比这更好?

Object[] objArray = new Object[n];
/*Do some stuff with objArray*/
objArray = new Object[n]
Run Code Online (Sandbox Code Playgroud)

否则,执行此操作将允许此操作在O(1)时间内运行,而for循环将采用O(n).

Boh*_*ian 5

这是不好的做法.

首先,为变量分配一个新数组实际上并没有"清除"任何东西(更多内容见下文).

这是最佳做法:

objArray = null;
Run Code Online (Sandbox Code Playgroud)

这使得原始数组无法访问,因此它(最终)将被垃圾收集.

它还避免了不必要的内存分配,从而创建了用于替换旧数组的空数组.

但是,这两个选项都没有"清除"原始阵列,这可能会造成虽然很小的安全风险.在收集垃圾之前,如果内存内容被转储等,则数组的内容可以被删除.

真正清晰的数组:

Arrays.fill(objArray, null);
Run Code Online (Sandbox Code Playgroud)

  • 分配新数组与分配null具有相同的效果.旧数组不再被引用,将被GC. (3认同)