gpt4 book ai didi

android - 尝试减少应用程序内存时,我应该记录哪些值?

转载 作者:太空宇宙 更新时间:2023-11-03 13:42:57 25 4
gpt4 key购买 nike

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

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

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 将在您尝试进行分配但没有足够大的空闲 block 来满足该请求时发生,即使在紧急垃圾收集运行之后也是如此。在 Android 7.1 及更早版本上,由于垃圾收集器的性质,这可能会发生,因为您的堆会变得 fragment 化。 freeMemory()表示所有空闲 block 的总和,而不是最大空闲 block 的大小。

因此,您需要查看您遇到的 OutOfMemoryError 崩溃。通常,在 Android 中,这些将来自大量分配,例如加载 Bitmap。如果那是您崩溃的根源,那么 freeMemory() 将毫无用处,您也无法记录任何内容。

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

关于android - 尝试减少应用程序内存时,我应该记录哪些值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47942709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com