Android,我看到堆在增长,但我希望它停止

标签 android garbage-collection heap-memory

我看到我的堆在增长,我知道它最终会在任何设备上崩溃,因为它一直在增长。

增长堆( fragment 情况)

在整个日志中都可以看到

在我的手机上,它会在使用 32mb 时使应用程序崩溃。其他手机当然会是 16mb,如果有那么少的资源运行 android 2.2

现在,我在我的位图上使用 recycle(),将事物设置为 null,从复杂的数据结构中弹出项目,并使用 System.gc() 调用垃圾回收,贯穿整个应用

但是,堆仍然在增长,这是一个问题......最终

我如何强制应用转储资源以使其继续运行。

通常都是“bitmap vm budget”超标,但我越来越觉得自己就是用不上“clear bitmap vm”命令

最佳答案

我也曾为这个问题苦苦挣扎。您可以做很多事情。

  1. 您可以对每个位图调用回收并将它们设置为空。(bitmap.recycle() 释放该位图使用的所有内存,但不会使位图对象无效)。

  2. 您还可以取消绑定(bind)与此 link 中指定的布局关联的 drawables .

  3. 您可以将您的hashmaps 转换为WeakHashmaps。这样当系统内存不足时,它的内存就会被释放。

  4. 您可以调整所有位图的大小。看看这个 l ink. .

  5. 您可以覆盖 Activity 中的 onLowMemory() 方法,当整个系统内存不足时该方法会被调用。你可以在那里释放一些资源。

  6. 您可以使您的对象SoftReferenceWeakreference,以便它们在内存不足的情况下被释放。

但真正的事实是,所有这些都可以延迟您的内存不足问题/崩溃,但不能消除它,因为您必须在某处泄漏您的 Activity 上下文或内存。

关于Android,我看到堆在增长,但我希望它停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8381617/

相关文章:

java - 设置磁盘上的最大缓存大小 Android Universal Image Loader

java - 使用 Serenity BDD 进行自动化测试时出现堆内存不足错误

c++ - tcmalloc ReleaseFreeMemory() 没有正确释放内存

javascript - JS垃圾收集器会清除堆栈内存吗?

java - AIX 服务器中的 IBM java 堆内存问题

android - 如何将通知从我的服务器推送到我的 Android 应用程序?

带有自己键盘的 Android 应用程序

java - 在内部使用共享类库,但在发布的 SDK 中不提供对它们的访问

android - GC 运行过于频繁

memory-management - 垃圾回收机制是如何工作的?