我使用了/proc/meminfo并解析了命令response.however,结果显示:
MemTotal: 94348 kB MemFree: 5784 kB
意思是。它显示只有5MB可用内存。安卓手机能做到吗?我的手机上只安装了5-6个应用程序,没有其他任务在运行。但此命令仍然显示可用内存非常少。
有人能澄清这一点吗?或者,有没有其他方法来获取android的内存使用量?
发布于 2010-07-07 14:20:04
注意:此答案测量设备的内存使用情况/可用情况。这不是您的应用程序可以使用的内容。为了衡量你的应用程序正在做什么,并且被允许做什么,Use android developer's answer。
Android docs - ActivityManager.MemoryInfo
MemoryInfo mi =新MemoryInfo();ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);activityManager.getMemoryInfo(mi);double availableMegs = mi.availMem / 0x100000L;//接口16+ double percentAvail = mi.availMem / (double)mi.totalMem * 100.0;
数字0x100000L的解释
1024 bytes == 1 Kibibyte
1024 Kibibyte == 1 Mebibyte
1024 * 1024 == 1048576
1048576 == 0x100000很明显,数字是用来从字节转换为兆字节的
附言:我们只需要计算一次总内存。所以在你的代码中只调用一次点1,然后,你可以重复调用点2的代码。
发布于 2013-10-09 16:55:56
这取决于您对希望获取的内存查询的定义。
通常,你想知道堆内存的状态,因为如果它使用了太多的内存,你会得到OOM并使应用程序崩溃。
为此,您可以检查下面的值:
final Runtime runtime = Runtime.getRuntime();
final long usedMemInMB=(runtime.totalMemory() - runtime.freeMemory()) / 1048576L;
final long maxHeapSizeInMB=runtime.maxMemory() / 1048576L;
final long availHeapSizeInMB = maxHeapSizeInMB - usedMemInMB;"usedMemInMB“变量越接近"maxHeapSizeInMB",availHeapSizeInMB越接近零,你就越接近对象模型。(由于内存碎片,您可能会在该值为零之前获得OOM。)
这也是内存使用的DDMS工具所显示的。
或者,还有实际的内存使用率,即整个系统使用了多少内存-请参阅accepted answer进行计算。
更新:由于Android O让你的应用程序也使用原生内存(至少对于位图存储,这通常是内存使用量巨大的主要原因),而不仅仅是堆,情况发生了变化,你得到的面向对象对象也减少了(因为堆不再包含位图,请查看),但如果你怀疑有内存泄漏,你仍然应该关注内存使用情况。在Android O上,如果你有内存泄漏,在旧版本上应该会导致OOM,它似乎会在你无法捕捉到它的情况下崩溃。下面是如何检查内存使用情况:
val nativeHeapSize = Debug.getNativeHeapSize()
val nativeHeapFreeSize = Debug.getNativeHeapFreeSize()
val usedMemInBytes = nativeHeapSize - nativeHeapFreeSize
val usedMemInPercentage = usedMemInBytes * 100 / nativeHeapSize但我认为最好是使用IDE的分析器,它以图形的形式实时显示数据。
所以在Android O上的好消息是,由于OOM存储了太多大的位图,所以很难发生崩溃,但坏消息是,我认为在运行时不可能捕捉到这样的情况。
编辑:Debug.getNativeHeapSize()似乎会随着时间的推移而变化,因为它会显示应用程序的总最大内存。因此,这些函数仅用于分析器,以显示应用程序的使用量。
如果您想要获得实际的总内存和可用的本机RAM,请使用以下命令:
val memoryInfo = ActivityManager.MemoryInfo()
(getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).getMemoryInfo(memoryInfo)
val nativeHeapSize = memoryInfo.totalMem
val nativeHeapFreeSize = memoryInfo.availMem
val usedMemInBytes = nativeHeapSize - nativeHeapFreeSize
val usedMemInPercentage = usedMemInBytes * 100 / nativeHeapSize
Log.d("AppLog", "total:${Formatter.formatFileSize(this, nativeHeapSize)} " +
"free:${Formatter.formatFileSize(this, nativeHeapFreeSize)} " +
"used:${Formatter.formatFileSize(this, usedMemInBytes)} ($usedMemInPercentage%)")发布于 2012-10-30 15:40:55
下面是一种计算当前运行的应用程序的内存使用率的方法
public static long getUsedMemorySize() {
long freeSize = 0L;
long totalSize = 0L;
long usedSize = -1L;
try {
Runtime info = Runtime.getRuntime();
freeSize = info.freeMemory();
totalSize = info.totalMemory();
usedSize = totalSize - freeSize;
} catch (Exception e) {
e.printStackTrace();
}
return usedSize;
}https://stackoverflow.com/questions/3170691
复制相似问题