首页 > 解决方案 > 在同一应用程序中,三星 G S9+(Android 8.1 API 26)比摩托罗拉 E2(Android 7.1.2 API 25)使用更多内存

问题描述

这是我为android studio中的内存使用情况拍摄的两张截图:

三星 Galaxy S9+(Android 8.1 Stock API 26) 在此处输入图像描述

摩托罗拉 E2(Android 7.1.2 Lineage OS 14.1 API 25) 在此处输入图像描述

当摩托罗拉 E2 仅约 55mb 时,S9+ 使用约 250mb

此时,应用程序只是在 RecyclerView() 中滚动,其中 S9+ 显示 5 个 ViewHolders(每个都有一个图像约 20kb),而 E2 显示 4 个 ViewHolders(与 S9+ 相同的图像)。

我不确定为什么内存使用量存在巨大差异它与Android版本有什么关系吗?

标签: androidmemory-management

解决方案


您无法以这种方式比较 RAM 使用情况,而不是使用 GCed 语言。在 Java 和其他 GC 语言中,GC 通常只在系统认​​为需要它时运行——当它运行不足时。如果它没有运行低,它将不会运行。这意味着大量可以清理的对象仍然在堆上,并且仍然对你不利。唯一公平的比较方法是在每次比较时运行强制 GC。或者更好的是,进行堆转储并仅计算不符合清理条件的对象。

现在可能还有其他原因,例如某些框架对象的实现差异导致内存泄漏。但很可能只是上面的解释。


推荐阅读