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

问题描述 投票:3回答:1

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

我找到了可以捕获的这些值:

long totalMemory = Runtime.getRuntime().totalMemory();
long freeMemory = Runtime.getRuntime().freeMemory();
long maxMemory = Runtime.getRuntime().maxMemory();

但我不确定那些是正确的。是freeMemory值得告诉我,如果我可能得到一个OutOfMemoryError?如果没有,我应记录哪些值?

android android-memory
1个回答
3
投票

这个freeMemory值是否可以告诉我是否有可能获得OutOfMemoryError?

可能不是。

当你尝试进行分配并且没有大到足以满足该请求的空闲块时,即使在紧急垃圾收集运行之后,也会发生OutOfMemoryError。在Android 7.1及更早版本中,由于垃圾收集器的性质,可能会发生这种情况,因为您的堆会碎片化。 freeMemory()表示所有空闲块的总和,而不是最大空闲块的大小。

所以,你需要看看你得到的OutOfMemoryError崩溃。通常,在Android中,这些将来自大量分配,例如加载Bitmap。如果这是你的崩溃的来源,那么freeMemory()将没什么用处,并且没有什么可以记录。

另一方面,如果你因为相当小的分配(比如128字节或更低)而崩溃,那么很可能你真的在耗尽你的堆。在这种情况下,freeMemory()可能对记录有用。

© www.soinside.com 2019 - 2024. All rights reserved.