如何 remove/discard "free" 在 android 应用程序中使用 ram

How to remove/discard "free" ram usage in android app

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

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

提前致谢!

如果您删除堆中的所有空闲 space,那么下一刻您将出现 OutOfMemoryError

堆中的某些 space 必须始终空闲,以便 OS 可以在您保留 运行 应用程序时分配内存。如果您删除所有空闲 space,那么 OS 甚至无法为您的变量分配内存,您的应用程序将因 OOM 而崩溃。

与其尝试释放空的 space,不如专注于释放已用的 space智能地当你搬出活动。确保您的 Activity 中没有留下任何悬空引用,因为这会导致内存泄漏并且堆大小不断增加,直到系统无法再分配并且您的应用程序崩溃。尝试删除对图像的引用并删除任何对回调的侦听器(如果已设置)。基本上,尽量减少活动的内存占用。

一个理想的状态是 Activity 在它被摧毁后立即释放它正在使用的所有 space。例如,您有 14 MB 的 1 字节数组,它们基本上是存储在内存中的位图,因为您可能在某处留下了对它们的引用。

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

可以 收缩,但特别是在 Android 5.0 之前,不太可能收缩太多。堆按页面扩展(4K?)。只有当整个页面空闲时,垃圾收集器才会将内存释放回 OS。但是,Dalvik 没有 "moving" 或压缩垃圾收集器,因此页面完全没有对象只能靠运气。

ART has a moving garbage collector,当你的应用不在前台时,它会更容易释放内存回到OS。

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