我在我的应用程序中有一个图像缓存,它使用SoftReferences实现。Dalvik从相对较小的堆开始启动应用程序,然后根据需求增加堆大小。但我希望从一开始就拥有更大的堆大小。因为当我已经有一些图像在缓存中,并且活动开始(例如)或其他峰值内存需求发生时,我的缓存会被清除,以便为该峰值需求腾出内存。结果是,在峰值消失后,我仍然有2-3 MB的可用空间,但我的缓存为空!
我认为解决这个问题的方法是预先分配一个更大的堆,即使在消耗2-3 MB的峰值时,它仍然有一些空间,这样我的SoftReferences就不会被清除。
我发现
那么我如何使Dalvik在启动时增加我的堆呢?
目前,我使用一个非常直接和简单的技术,只需分配一个大数组并释放它。这使得Dalvik按照我想要的方式增加堆。但是,我相信一定有更优雅的方法来做到这一点。你能告诉我吗?
我认为解决这个问题的方法是预先分配一个更大的堆,即使在消耗2-3 MB的峰值时,它仍然有一些空间,这样我的SoftReferences就不会被清除。
我发现
VMRuntime.getRuntime().setMinimumHeapSize(BIGGER_SIZE)
将是有帮助的。特别是,Google在其应用程序中使用它,如here所提到的。然而,VMRuntime类已标记为过时,并表示将在未来的版本中从公共API中删除。因此,setMinimumHeapSize
不是永久性的解决方案。那么我如何使Dalvik在启动时增加我的堆呢?
目前,我使用一个非常直接和简单的技术,只需分配一个大数组并释放它。这使得Dalvik按照我想要的方式增加堆。但是,我相信一定有更优雅的方法来做到这一点。你能告诉我吗?