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

  public static long getTotalSpace(Context ctx) {
//1.创建ActivityManager对象
ActivityManager am = (ActivityManager)
ctx.getSystemService(Context.ACTIVITY_SERVICE);
//2 获取封装内存信息的对象
MemoryInfo memoryInfo = new MemoryInfo();
//3.对对象赋值
am.getMemoryInfo(memoryInfo);
return memoryInfo.totalMem;
}

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

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

  然而不禁对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. ADO.net 实体类 、数据访问类
  2. 8天学通MongoDB——第一天 基础入门
  3. 第一篇 ERP是什么?-从道的层面浅谈我的理解
  4. iOS开发-UIColor转UIIamge方法
  5. 实用iPhone Cydia插件
  6. python之路-SQLAlchemy
  7. 转: angular编码风格指南
  8. BZOJ 1022 小约翰的游戏 (Anti-Nim游戏)
  9. asp.net Login控件基本属性及事件说明
  10. Java核心技术 卷Ⅰ 基础知识(2)
  11. js--学习方法之-转
  12. 将本地文件上传到GitHub
  13. darknet源码解析
  14. JS with
  15. Chrome 插件安装技巧
  16. socket、web socket
  17. JeeSite框架中httpSession.invalidate();无效
  18. Servlet --简单用户留言系统
  19. windows10安装tensorflow CPU版本
  20. windows 下配置ndk环境,无需cygwin

热门文章

  1. 解决OS X系统连接VPN后无法访问内网资源的问题
  2. WCF初探-28:WCF中的并发
  3. 【PCB】【项目记录】AWG任意波形产生器
  4. Erlang中如何在同一台机器上运行多个erlang节点?
  5. href链接的地址
  6. (转载)jQuery 1.6 源码学习(一)——core.js[1]之基本架构
  7. c# 反射应用之工厂
  8. HOJ 1001: A+B; 1002: A+B+C
  9. php 常用数组操作
  10. linux内核学习之六 进程创建过程学习