Android中proc/meminfo的详解

原文地址 https://www.cnblogs.com/adv-qbj/p/4719787.html

今天在写到获取手机可用内存空间的总大小的时候,通过下面的方法去获取的时候,发现该方法最低支持的版本是16,这显然是不可取的。

复制代码
 1  public static long getTotalSpace(Context ctx) {   
 2       //1.创建ActivityManager对象          
 3          ActivityManager am = (ActivityManager)
 4          ctx.getSystemService(Context.ACTIVITY_SERVICE);
 5      //2 获取封装内存信息的对象
 6          MemoryInfo memoryInfo = new MemoryInfo(); 
 7      //3.对对象赋值
 8          am.getMemoryInfo(memoryInfo);
 9        return memoryInfo.totalMem;
10  }
复制代码

 

经查阅资料后,通过读取proc/meminfo的数据,发现第一行就是我想要的可用内存空间的总大小,通过流的形式读取了想要的内存空间的总大小

复制代码
 1 try {
 2             FileReader fileReader = new FileReader("proc/meminfo");
 3             BufferedReader br = new BufferedReader(fileReader);
 4 
 5             String readLine = br.readLine();// 读取一行之后刚好是TotalMem的大小
 6 
 7             // 对读取到的字符串进行ASCII值的匹配,获取到需要的内存空间的大小
 8             char[] charArray = readLine.toCharArray();
 9 
10             // 通过StingBuffer将可用空间的 总大小串起来
11             StringBuffer sb = new StringBuffer();
12             for (char c : charArray) {
13                 if (c >= '0' && c <= '9') {
14                     sb.append(c);
15                 }
16             }
17             //将sb转换成字符串,同时注意到数据库文件中的单位是kB,为了统一方便使用,转换成字节为单位的
18             return Long.parseLong(sb.toString())*1024;
19 
20   } catch (Exception e) {
21             e.printStackTrace();
22   }
复制代码

  然而不禁对proc/meminfo中的其他数据产生了信息,都代表什么意思?

通过adb shell切换到linux环境下,切换到该目录下,通过cat meminfo得到如下信息

当然你可以在DDMS中找到相应的文件路径,导出来,用记事本打开查看,基本是一样的。

针对这些其他数据,查阅资料后,各自的解释如下: MemTotal: 所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)

 
MemFree: LowFree与HighFree的总和,被系统留着未使用的内存
 
Buffers: 用来给文件做缓冲大小
 
Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache ).
 
SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小,已经被交换出来的内存,但仍然被存放在swapfile                    中。用来在需要的时候很快的被替换而不需要再次打开I/O端口。
 
Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用.
 
Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径.
 
HighTotal:
 
HighFree: 该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存。
 
LowTotal:
 
LowFree: 低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构。Among many
 
     other things, it is where everything from the Slab is allocated. Bad things happen when you’re out      of lowmem.
 
SwapTotal: 交换空间的总大小
 
SwapFree: 未被使用交换空间的大小
 
Dirty: 等待被写回到磁盘的内存大小。
 
Writeback: 正在被写回到磁盘的内存大小。
 
AnonPages:未映射页的内存大小
 
Mapped: 设备和文件等映射的大小。
 
Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。
 
SReclaimable:可收回Slab的大小
 
SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
 
PageTables:管理内存分页页面的索引表的大小。
 
NFS_Unstable:不稳定页表的大小
 
VmallocTotal: 可以vmalloc虚拟内存大小
 
VmallocUsed: 已经被使用的虚拟内存大小。
 
VmallocChunk: largest contigious block of vmalloc area which is free

 个人觉得上述的总结还是比较好的,这里引用下,作为一个扩展。。。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值