1

我有一个数组int dom[][] = new int[28][3];,我将它移动到另一个数组。如何释放该阵列的空间?在 android 模拟器上运行它时,我收到了高 cpu 警告。

4

4 回答 4

4

在 Java 中,您不必手动释放数组,垃圾收集器会为您清除内存。您可以将您的对象设置为 null: dom = null

CPU 警告与此无关,android 模拟器在启动时有一些 CPU 密集型操作,所以你的处理器将在 100% 的某个时间直到模拟器启动。

于 2013-01-26T14:37:26.890 回答
2

将dom设置为null。以便在下一个垃圾收集器运行时将其释放。

于 2013-01-26T14:33:57.133 回答
2

您无需执行任何操作:如果由于您没有对它的引用而无法再访问该数组,则它将被垃圾收集(将引用设置为 null 不会产生影响)。

通常,如果这是一个局部变量并且您没有从声明它的方法中返回它,那么只要方法退出(即一旦数组超出范围),它就会有资格进行 GC。

如果您“收到高 CPU 警告”,那么问题出在 CPU 上,而不是内存上。

于 2013-01-26T14:39:37.497 回答
1

我在运行 android 模拟器时收到高 cpu 警告?

它可以是任何东西。但是,我猜您已经添加了一些显式System.gc()调用以尝试更早地释放空间。

不要那样做!

虚拟机通常知道什么时候有很多潜在的垃圾需要收集……那是运行 GC 的最佳时间。并且您可以放心,GC 将立即运行,JVM 决定使用 OOME 进行救助。

如果你打电话给System.gc()自己,你可能只会导致虚拟机浪费 CPU 周期而没有什么有用的效果。


在大多数情况下,最好的策略是让 VM 根据需要安排 GC。空引用会有所帮助,但通常是不必要的。(坦率地说,一个 28x3 的整数数组占用的空间很小,可能不值得归零。)

于 2013-01-26T14:53:58.793 回答