系统相关
首页 > 系统相关> > 尝试减少应用程序内存,我应该记录什么值?

尝试减少应用程序内存,我应该记录什么值?

作者:互联网

我的应用程序经常内存不足.我正在努力减少内存使用量,但我想记录用户平均使用多少内存,可用内存等,以查看我所做的更改是否对现实世界产生影响.

我发现了可以捕获的这些值:

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