largeHeap
选项之前,我正在处理大位图,并且几乎消耗了应用程序可用的所有内存,通过在导航和加载新的位图时进行回收,它可以在几乎完整的堆上运行。但是当某些操作需要更多内存时,应用程序会崩溃。因此,我启用了 largeHeap=true
来获得更多内存。但是这样做会产生意外的行为,似乎位图的
recycle()
方法大多数情况下都不起作用,原来在58MB内存中运行的应用程序(并有时超出抛出 OutOfMemoryException
)现在以指数方式消耗内存并继续增长(目前测试所显示分配了231MB内存),期望的行为是内存管理仍然正常工作,应用程序不会使用超过60MB。如何避免这种情况?或有效地回收位图?
编辑:实际上,在设备上分配超过390MB的内存时,我使它产生
OutOfMemoryError
。
阅读 GC_* 日志表明,只有 GC_FOR_ALLOC 有时释放了3.8MB,但几乎从未释放其他 GC 运行的内容。