我有一个执行一些内存密集型任务的应用程序。我试图弄清楚总可用内存是多少以及可用内存是多少。我是通过Runtime.getRuntime().freeMemory()
和Runtime.getRuntime().totalMemory()
我很好奇,如果我得到的结果是设备上的可用内存和总内存总量,或者它是应用程序运行的Dalvik VM实例可用的内存总量?我会很感激一些反馈。谢谢!
答案 0 :(得分:0)
根据JavaDocs,这些应该是针对您的进程的堆。话虽如此:
getMemoryClass()
on ActivityManager
是一种更加Android-y的方式来确定流程的堆大小。
因为Dalvik的垃圾收集器是非压缩的,所以像freeMemory()
这样的方法报告的内存会夸大你可以分配多少。通过“非压缩”,我的意思是如果你释放两个恰好相邻的内存块,垃圾收集器将它们留作两块内存。将其与Java VM进行对比,Java VM将识别两个块是相邻的并更新堆以反映一个较大的空闲块而不是两个较小的空闲块。非压缩垃圾收集器意味着您的堆更容易碎片而不是完全耗尽。您将尝试分配一些大块并获得OutOfMemoryError
,而不是因为堆缺少可用内存,而是因为没有足够大的单个空闲块来满足您的请求。