我有一个数组int dom[][] = new int[28][3];
,我将它移动到另一个数组。如何释放该阵列的空间?在 android 模拟器上运行它时,我收到了高 cpu 警告。
4 回答
在 Java 中,您不必手动释放数组,垃圾收集器会为您清除内存。您可以将您的对象设置为 null: dom = null
。
CPU 警告与此无关,android 模拟器在启动时有一些 CPU 密集型操作,所以你的处理器将在 100% 的某个时间直到模拟器启动。
将dom设置为null。以便在下一个垃圾收集器运行时将其释放。
您无需执行任何操作:如果由于您没有对它的引用而无法再访问该数组,则它将被垃圾收集(将引用设置为 null 不会产生影响)。
通常,如果这是一个局部变量并且您没有从声明它的方法中返回它,那么只要方法退出(即一旦数组超出范围),它就会有资格进行 GC。
如果您“收到高 CPU 警告”,那么问题出在 CPU 上,而不是内存上。
我在运行 android 模拟器时收到高 cpu 警告?
它可以是任何东西。但是,我猜您已经添加了一些显式System.gc()
调用以尝试更早地释放空间。
不要那样做!
虚拟机通常知道什么时候有很多潜在的垃圾需要收集……那是运行 GC 的最佳时间。并且您可以放心,GC 将立即运行,JVM 决定使用 OOME 进行救助。
如果你打电话给System.gc()
自己,你可能只会导致虚拟机浪费 CPU 周期而没有什么有用的效果。
在大多数情况下,最好的策略是让 VM 根据需要安排 GC。空引用会有所帮助,但通常是不必要的。(坦率地说,一个 28x3 的整数数组占用的空间很小,可能不值得归零。)