为什么DDMS可以通过单击GC按钮释放内存而从不自动调用GC?

时间:2014-12-24 09:09:17

标签: java android memory garbage-collection slideshow

我正在制作像应用程序一样的幻灯片。

但是,我发现幻灯片播放30分钟后会自动重启。

做ps和我可以看到每次切换图片时 RSS 部分都在增加。

我尝试在加载下一张图片之前添加System.gc(),甚至调用Thread.sleep()来产生当前线程。但gc永远不会发生......

我认为我没有在我的代码中保留任何无用的引用,因为如果我将其与DDMS相关联并点击GC button,则会执行GC } 很好。并且 RSS 部分的大小减少到流程开始时的水平。

问题是为什么DDMS可以通过单击GC按钮释放大量内存,但不会自动调用GC(只是将无用的对象留在那里)?

1 个答案:

答案 0 :(得分:1)

您无法强制使用GC(或者至少我不知道Android上的此类功能)。正如System.gc()所述:

  

向VM表明运行垃圾收集器是一个好时机。请注意,这只是一个提示。无法保证垃圾收集器实际上会运行。

如果你的应用没有OutOfMemoryError,那么一切都很好。否则,您会遇到内存管理问题,并且某些资源(如图像(和其他内存生成对象))无法正常回收/销毁。