我有一个数组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 的整数数组占用的空间很小,可能不值得归零。)