我的应用程序出现了一些内存不足的问题,想要调用垃圾回收器,但我不确定应该在哪个方法中调用它。
这是我的代码:
public static void CleanUpMemory(){
System.runFinalization();
Runtime.getRuntime().gc();
System.gc();
}
目前我在onStop()
中调用这个方法,但是在onDestroy()
中调用它会更好吗?
我的应用程序出现了一些内存不足的问题,想要调用垃圾回收器,但我不确定应该在哪个方法中调用它。
这是我的代码:
public static void CleanUpMemory(){
System.runFinalization();
Runtime.getRuntime().gc();
System.gc();
}
目前我在onStop()
中调用这个方法,但是在onDestroy()
中调用它会更好吗?
手动调用 GC 永远不是一个好的实践。Dalvik 或 ART 比我们更清楚何时进行垃圾回收。
如果您的应用程序需要大量内存来处理昂贵的操作,则这是一个好的解决方案。
<application
....
android:largeHeap="true">
最好让垃圾回收器独自工作。
当需要回收内存时,它会开始工作。
请注意,调用System.gc()
仅是建议在确实需要时启动gc的方法。
来自javadoc:
调用gc方法建议Java虚拟机将努力回收未使用的对象,以便使它们当前占用的内存可快速重用。当从方法调用返回时,Java虚拟机已尽最大努力从所有丢弃的对象中回收空间。
尝试使用改进来使用更少的内存,而不是显式调用gc(缓存对象、使用池等)。
在您的活动中直接调用gc()
并不是一个好的做法(JVM知道何时运行它)。
如果您遇到内存问题,请尝试使用MAT查找应用程序中的内存泄漏。
此外,System.gc()调用不会强制进行垃圾回收。Dalvik决定何时运行gc。