安卓堆大小和软引用

3
我有一个应用程序,创建了一系列的位图。为了避免内存不足,我将这些位图保存在软引用中。在堆大小达到16MB之前,我希望堆大小可以增长到最大值,然后再开始回收我的软引用。但是,在增长堆大小到其最大值之前,软引用会被过于积极地回收。是否有办法减少软引用的回收频率?或者手动将堆大小增加到最大值?可能有一种方法只分配16MB的内存来启动应用程序吗?
2个回答

3

目前没有办法修改SoftReference集合的行为。

我不确定你所说的“手动将堆增长到最大”是什么意思。

如果这些实例是Bitmap类的实例(而不是某个自定义位图实现),那么像素数据实际上存储在本地堆上,但使用了令人讨厌的“外部分配”记账技巧,这进一步复杂了情况。(值得注意的是,存储是由终结器而不是GC释放的,并且终结器必须在GC完成后在单独的线程中执行。可以分配位图直到耗尽内存,而GC无法在抛出OOM错误之前释放内存。)


通过“grow heap to max”,我希望找到一种在启动时强制为我的应用程序分配16MB的方法。这相当于Java中的“-Xmx16m”。 - ab11
这限制了堆的最大大小,目前已经实现(Android应用程序框架将其传递到VM中)。您是想使用“-Xms16m”来设置初始大小吗?由于外部分配问题,该特定选项不会完全满足您的要求。有一个隐藏的方法(最初意外公开,后来被隐藏)称为dalvik.system.VMRuntime.setMinimumHeapSize,旨在实现您想要的功能,但它只是一个提示,并且很可能在未来消失。 - fadden

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接