2013-09-30 57 views
4

我正在編寫一個需要測量當前空閒/使用RAM的Android應用程序。如何解釋Android上/ proc/meminfo的值?

搜索這個網站顯示多個線程主題類似通常建議兩種方法:


方法1:

MemoryInfo mi = new MemoryInfo(); 
ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE); 
activityManager.getMemoryInfo(mi); 
long availableMegs = mi.availMem/1048576L; 
totalMegs = mi.totalMem/1048576L; //available since API 16 only 

方法2:解析的/ proc/meminfo中。

我已經嘗試了兩種方法,他們似乎工作正常。我從兩種方法中獲得相同的值。 我的問題是,當我去Settings -> Apps -> Running在屏幕的底部是有關免費/使用的RAM的信息,這不同於我用上述方法得到的。 我懷疑Google是否將緩存的應用程序報告爲可用內存,因爲當我殺死一些緩存的進程時,Google報告的內存使用情況幾乎沒有變化,但是我的應用程序的運行量接近我剛剛殺死的正在運行的進程的大小。

例子:

方法1個輸出:

meminfo: avail: 660, total: 821, used: 161 

方法2輸出:

[email protected]:/proC# cat meminfo 
MemTotal:   840868 kB 
MemFree:   548080 kB 
Buffers:    0 kB 
Cached:   128300 kB 
SwapCached:   0 kB 
Active:   192052 kB 
Inactive:   79816 kB 
Active(anon):  157792 kB 
Inactive(anon):  0 kB 
Active(file):  34260 kB 
Inactive(file): 79816 kB 
Unevictable:   0 kB 
Mlocked:    0 kB 
SwapTotal:    0 kB 
SwapFree:    0 kB 
Dirty:     0 kB 
Writeback:    0 kB 
AnonPages:  143580 kB 
Mapped:   67584 kB 
Slab:    6736 kB 
SReclaimable:  2104 kB 
SUnreclaim:   4632 kB 
PageTables:   4008 kB 
NFS_Unstable:   0 kB 
Bounce:    0 kB 
WritebackTmp:   0 kB 
CommitLimit:  420432 kB 
Committed_AS: 1606616 kB 
VmallocTotal:  122880 kB 
VmallocUsed:  20588 kB 
VmallocChunk:  77828 kB 

MemFree + Cached = 660MB 


Android reported RAM usage: 679MB Free, 142MB used. 

我怎樣可以得到相同的數字作爲Android的報道?

我想我必須從/proc/meminfo得到它,因爲官方API似乎不存在。

+0

[如何發現我的應用程序在Android中的內存使用情況]可能的重複(http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android ) – CommonsWare

+0

我看過 http:// stackoverflow。com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android 但它不回答我的問題。我已經查看了內存使用數據的所有資源,但無法獲取Android提供的信息。 – Raqua

回答

0

Settings -> Apps -> Running,高級別有兩個分區:usedfree

但是,當你仔細觀察時,Running只包含佔用used的一部分;同樣,當你點擊按鈕show cached processes(在左上角)時,你會看到(在底部)他們只佔用free的一部分;另一部分應該是真正的空閒內存(即沒有任何緩存的應​​用程序)。

問題是它沒有顯示任何數字。而從真正的免費記憶的「部分」來看,它與proc/meminfo得到的結果有點不同。

4

MemTotal - 物理RAM的總量,以千字節爲單位。

MemFree - 物理RAM的數量,以千字節爲單位,未被系統使用。

緩衝區 - 用於文件緩衝區的物理RAM量(以千字節爲單位)。

緩存 - 用作高速緩存的物理RAM的數量(以千字節爲單位)。

SwapCached - 用作高速緩存的交換量(以千字節爲單位)。

活動 - 處於活動狀態的緩衝區或頁面緩存內存總量(以千字節爲單位)。這是最近使用過的內存,通常不會被其他用途回收。

非活動 - 緩衝區或頁面緩存內存的總量(以千字節爲單位)可用且可用。這是最近未使用過的內存,可以回收用於其他目的。

HighTotal和HighFree - 內存總量和可用空間量(以千字節爲單位),不直接映射到內核空間。 HighTotal值可以根據所用內核的類型而有所不同。

LowTotal和LowFree - 直接映射到內核空間的總內存和可用內存量(以千字節爲單位)。 LowTotal值可以根據使用的內核類型而有所不同。

SwapTotal - 可用交換總量,以千字節爲單位。

SwapFree - 掉換總量,以千字節爲單位。

髒 - 內存總量,以千字節爲單位,等待寫回磁盤。回寫 - 以千字節爲單位的活動寫回磁盤的總內存量。

映射 - 已用於使用mmap命令映射設備,文件或庫的內存總量(以千字節爲單位)。

Slab - 內核用於緩存自己使用的數據結構的內存總量(以千字節爲單位)。

Committed_AS - 估計完成工作負載的總內存量(以千字節爲單位)。此值表示最差的情況下的值,並且還包括交換內存。 PageTables - 專用於最低頁表級別的總內存量(以千字節爲單位)。

VMallocTotal - 總分配的虛擬地址空間的總內存量(以千字節爲單位)。

VMallocUsed - 已用虛擬地址空間的總內存量(以千字節爲單位)。

VMallocChunk - 可用虛擬地址空間的最大連續內存塊(以千字節爲單位)。

HugePages_Total - 系統的巨大頁面總數。該數字是通過將Hugepagesize除以爲/ proc/sys/vm/hugetlb_pool中指定的巨大頁數預留的兆字節而得出的。此統計信息僅出現在x86,Itanium和AMD64體系結構中。

HugePages_Free - 系統可用的大頁數總數。此統計信息僅出現在x86,Itanium和AMD64體系結構中。

Hugepagesize - 每個巨單頁的大小,以千字節爲單位。默認情況下,32位體系結構的單處理器內核上的值爲4096 KB。對於SMP,hugemem內核和AMD64,默認值爲2048 KB。對於Itanium體系結構,默認值爲262144 KB。此統計信息僅出現在x86,Itanium和AMD64體系結構中。