【发布时间】:2015-09-07 16:24:08
【问题描述】:
在删除一些大对象后,我在更新应用程序的可用堆大小时遇到了困难。
我的要求是一旦用户达到特定的堆大小级别就释放内存。例如,我正在使用三星 Tab3,它的应用程序堆大小为 64 Mb。
应用程序在查看图像时不应出现内存不足,因此我限制了 55 MB 作为堆大小增长的最大限制。我正在查看图像之前检查可用的堆大小。如果堆大小大于 55 MB,那么我会删除一些最近查看的图像,这样我就可以获得足够的内存来加载图像。
但问题是,在删除图像对象后,我得到了最后一次增加的堆大小,它总是大于 55 MB。删除每个图像后我也调用了 gc,但不影响。
我希望在删除图像对象后减小堆大小。
如果堆已达到 55 MB,那么每次删除堆都应该减少,如何减小堆大小?
我正在使用以下代码来获取可用的堆大小。
/**
* This method is used to get currently allocated heap size to application.
*/
public static int getAllocatedHeapSize()
{
DecimalFormat df = new DecimalFormat();
int size = new Double(Runtime.getRuntime().totalMemory()/1048576).intValue();
Log.d("heap", "debug.memory: allocated: " + size + "MB of " + df.format(new Double(Runtime.getRuntime().maxMemory()/1048576))+ "MB (" + df.format(new Double(Runtime.getRuntime().freeMemory()/1048576)) +"MB free)");
return size;
}
/**
* Check whether free memory is available to store new attachment page
* @return true if available else false
*/
public static boolean isFreeMemoryAvailable()
{
int allocatedHeapSize = getAllocatedHeapSize();
if (allocatedHeapSize > ) {
return false;
}
return true;
}
isFreeMemoryAvailable() 方法进入无限状态,因为它没有得到更新的堆大小。
尽快给我解决方案。
【问题讨论】:
标签: android memory-management garbage-collection heap-memory