我有一个创建一系列位图的应用程序。我在SoftReferences中持有这些位图,以避免内存不足。我希望堆大小在开始收集我的SoftReferences之前增长到最大16MB。但是,在将堆增长到最大值之前,非常急切地收集SoftReferences。反正是否迫使参考文献不那么急切地收集?或手动将堆增长到最大?可能是一种只用16mb分配启动应用程序的方法?
答案 0 :(得分:3)
目前无法修改SoftReference集合行为。
我不确定你的意思是“手动将堆增加到最大值”。
如果这些是Bitmap类的实例(与某些自定义位图实现相反),则像素数据实际上存储在本机堆上,但使用恼人的“外部分配”会计技巧,这进一步使情况复杂化。 (值得注意的是,存储器由终结器释放,而不是GC,并且终结器必须在GC完成后在单独的线程中执行。可以分配位图直到内存不足,并且GC无法释放抛出OOM错误之前的内存。)
答案 1 :(得分:1)
这是Andriod的一个已知问题。当VM收集软引用时,它会收集全部或者不收集,虽然它应该收集“some”并且在有足够的空闲堆时不应该收集任何东西。
检查:http://code-gotcha.blogspot.com/2011/09/softreference.html