如何删除/放弃"免费"在Android应用程序中使用ram

时间:2015-01-24 11:06:36

标签: android eclipse ram

我的应用程序使用的RAM存在问题,因为它使用了大量的RAM。在诊断使用情况时,我感到非常震惊,看到超过一半的ram是无用的或说分配免费..这是预览

enter image description here

所以我想摆脱RAM的负担,这只是免费的。我用谷歌搜索了它,但我认为在这个问题上没有好的帖子..

提前致谢!

2 个答案:

答案 0 :(得分:2)

如果删除堆中的所有可用空间,那么下一瞬间就会出现 OutOfMemoryError

堆中的某些空间必须始终是空闲的,以便操作系统可以在您继续运行应用程序时利用它来分配内存。如果删除所有可用空间,则操作系统将无法为您的变量分配内存,并且您的应用程序将因OOM而崩溃。

您应该 专注于释放已用空间 ,而不是试图释放空白空间,就像您搬出活动时一样。确保您的活动中没有悬空引用,因为这会导致内存泄漏,并且堆大小会不断增加,直到系统无法再分配并且您的应用程序崩溃为止。尝试删除对图像的引用,如果已设置任何,则删除所有回调的侦听器。基本上,尝试减少活动的内存占用。

一个理想的状态就是活动一旦被摧毁就释放它正在使用的所有空间。例如,你有一个14字节的1字节数组,基本上是存储在内存中的位图,因为你可能在某处留下了对它们的引用。

答案 1 :(得分:1)

如果堆没有足够大的块用于分配并且堆小于您所在设备的堆大小限制,则堆会在分配内存时展开。

可以缩小,但特别是在Android 5.0之前,它不太可能缩小太多。堆扩展页面(4K?)。只有当整个页面空闲时,垃圾收集器才会将内存释放回操作系统。然而,Dalvik没有一个"移动"或压缩垃圾收集器,所以只有纯粹的运气才能使页面完全没有物体。

ART has a moving garbage collector,当您的应用不在前台时,因此更容易将内存释放回操作系统。

正如Swayam建议的那样,你所能做的就是确保你有效地使用你的堆。 Android框架在管理堆本身方面的作用取决于框架,您无法直接控制它。