【发布时间】:2011-05-06 09:16:13
【问题描述】:
我的应用程序中有一个使用 SoftReferences 实现的图像缓存。 Dalvik 使用相对较小的堆启动应用程序,然后在需要时增加它。但我想从一开始就让我的堆大小更大。那是因为当我在缓存中已经有一些图像,并且活动开始(例如)或发生其他峰值内存需求时,我的缓存被清除以让内存满足该峰值需求。结果,高峰期过去后,我还有 2-3 MB 的可用空间,但我的缓存是空的!
我看到的解决这个问题的方法是预先分配一个更大的堆正手,所以即使峰值消耗 2-3 MB,它仍然有一些空间空间,所以我的 SoftReferences 不会被清除。
我发现VMRuntime.getRuntime().setMinimumHeapSize(BIGGER_SIZE) 会很有帮助。特别是,谷歌在他们的应用程序中使用了它,正如提到的here。但是,VMRuntime 类被标记为已弃用,并表示将在未来版本中从公共 API 中删除。所以setMinimumHeapSize不是永久的解决方案。
我如何让 Dalvik 在启动时增加我的堆?
目前我通过分配一个大数组并释放它来使用一种非常直接和俗气的技术。这使得 Dalvik 可以随心所欲地增长堆。但是,我确信必须有更优雅的方式来做到这一点。请告诉我好吗?
【问题讨论】:
-
我怀疑你会找到使用公共 API 的方法
-
google maps 使用反射和这个 api,我在搜索有关通话的信息时发现了这篇文章 :)
标签: android size heap-memory