尝试减少应用程序内存,我应该记录什么值?
作者:互联网
我的应用程序经常内存不足.我正在努力减少内存使用量,但我想记录用户平均使用多少内存,可用内存等,以查看我所做的更改是否对现实世界产生影响.
我发现了可以捕获的这些值:
long totalMemory = Runtime.getRuntime().totalMemory();
long freeMemory = Runtime.getRuntime().freeMemory();
long maxMemory = Runtime.getRuntime().maxMemory();
但是我不确定那些是正确的.这个freeMemory值是否可以告诉我是否可能出现OutOfMemoryError?如果没有,我应该记录哪些值?
解决方法:
Is that freeMemory value one that would tell me if I’m likely to get an OutOfMemoryError?
可能不是.
当您尝试进行分配并且没有足够大的可用块来满足该请求时,即使在紧急垃圾收集运行之后,也会发生OutOfMemoryError.在Android 7.1及更早版本上,由于垃圾收集器的特性,这可能是由于您的堆碎片化而发生的. freeMemory()表示所有空闲块的总和,而不是最大空闲块的大小.
因此,您需要查看所收到的OutOfMemoryError崩溃.通常,在Android中,这些将来自大量分配,例如加载位图.如果这是崩溃的根源,则freeMemory()几乎没有用,您无法登录.
另一方面,如果您因相当小的分配(例如128字节及更低)而崩溃,则很可能确实是在耗尽堆空间.在这种情况下,freeMemory()可能对日志记录很有用.
标签:android-memory,android 来源: https://codeday.me/bug/20191110/2014091.html