Android
手机的内存大小信息存放在手机系统的/proc/meminfo
文件中,可以通过读取这个文件来获取内存信息。
adb shell
查看
- 通过
adb shell
命令,进入终端
adb shell
- 执行
cat /proc/meminfo
,查看内存信息,命令如下:
cat /proc/meminfo
输出信息为:
MemTotal: 5788180 kB
MemFree: 202400 kB
MemAvailable: 1862008 kB
Buffers: 137020 kB
Cached: 1670164 kB
SwapCached: 9972 kB
Active: 2311504 kB
Inactive: 811540 kB
Active(anon): 1050552 kB
Inactive(anon): 408972 kB
Active(file): 1260952 kB
Inactive(file): 402568 kB
Unevictable: 122932 kB
Mlocked: 118792 kB
SwapTotal: 2621436 kB
SwapFree: 1916732 kB
Dirty: 116 kB
Writeback: 0 kB
AnonPages: 1433504 kB
Mapped: 728712 kB
Shmem: 20948 kB
Slab: 375252 kB
SReclaimable: 133676 kB
SUnreclaim: 241576 kB
KernelStack: 73744 kB
PageTables: 99356 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 5515524 kB
Committed_AS: 165453160 kB
VmallocTotal: 263061440 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
CmaTotal: 204800 kB
CmaFree: 6112 kB
常用项介绍如下:
(1)MemTotal: 所有可用RAM大小。(即物理内存减去一些预留位和内核的二进制代码大小)
(2)MemFree: LowFree与HighFree的总和,被系统留着未使用的内存。
(3)Buffers: 用来给文件做缓冲大小。
(4)Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于diskcache minus SwapCache)。
(5)SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小。已经被交换出来的内存,仍然被存放在swapfile中,用来在需要的时候很快的被替换而不需要再次打开I/O端口。
(6)Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要,否则不会被移作他用。
(7)Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径。
(8)SwapTotal: 交换空间的总大小。
(9)SwapFree: 未被使用交换空间的大小。
(10)Dirty: 等待被写回到磁盘的内存大小。
(11)Writeback: 正在被写回到磁盘的内存大小。
(12)AnonPages:未映射页的内存大小。
(13)Mapped: 设备和文件等映射的大小。
(14)Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。
(15)SReclaimable:可收回Slab的大小。
(16)SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)。
(17)PageTables:管理内存分页页面的索引表的大小。
(18)NFS_Unstable:不稳定页表的大小。
代码获取
获取内存总大小
public static long getTotalMem() {
try {
FileReader fr = new FileReader(FILE_MEMORY);
BufferedReader br = new BufferedReader(fr);
String text = br.readLine();
String[] array = text.split("\\s+");
Log.w(TAG, text);
// 单位为KB
return Long.valueOf(array[1]);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return -1;
}
获取可用内存大小
public static long getFreeMem(Context context) {
ActivityManager manager = (ActivityManager) context
.getSystemService(Activity.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo info = new ActivityManager.MemoryInfo();
manager.getMemoryInfo(info);
// 单位Byte
return info.availMem;
}
小结
以上,亲测可用,如有问题欢迎留言交流~