Android中proc/meminfo的詳解(原)


今天在寫到獲取手機可用內存空間的總大小的時候,通過下面的方法去獲取的時候,發現該方法最低支持的版本是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

 個人覺得上述的總結還是比較好的,這里引用下,作為一個擴展。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM