在 Android Settings中,「應用」 - 「正在運行」,能夠看到內存相關的信息。以下圖java
這三個內存指標都來自 /proc/meminfo 這支文件中。post
root@generic_x86:/proc # cat meminfo MemTotal: 1551556 kB MemFree: 1176792 kB Buffers: 4620 kB Cached: 157696 kB
總內存 = Memtotalthis
剩餘內存 = MemFree + Cached - SECONDARY_SERVER_MEMspa
SECONDARY_SERVER_MEM 爲 ActivityManger.Meminfo.secondaryServerThresholdcode
如上,Clock 的內存爲 4.1 M。orm
這個內存值取自 Pss ,從 ActivityManagerService.getProcessesPss()中取得。進程
long[] pss = ActivityManagerNative.getDefault().getProcessPss(pids); int bgIndex = 0; for (int i=0; i<pids.length; i++) { ProcessItem proc = mAllProcessItems.get(i); changed |= proc.updateSize(context, pss[i], mSequence);
boolean updateSize(Context context, long pss, int curSeq) { mSize = pss * 1024; if (mCurSeq == curSeq) { String sizeStr = Formatter.formatShortFileSize( context, mSize); if (!sizeStr.equals(mSizeStr)){ mSizeStr = sizeStr; // We update this on the second tick where we update just // the text in the current items, so no need to say we // changed here. return false; } } return false; }
這個Pss 與 procrank 展現出來的 pss 是同樣的。因此說他們應該取的同一個值。繼續看看 ActivityManagerService 如何拿的吧。內存
public long[] getProcessPss(int[] pids) { 4294 enforceNotIsolatedCaller("getProcessPss"); 4295 long[] pss = new long[pids.length]; 4296 for (int i=pids.length-1; i>=0; i--) { 4297 ProcessRecord proc; 4298 int oomAdj; 4299 synchronized (this) { 4300 synchronized (mPidsSelfLocked) { 4301 proc = mPidsSelfLocked.get(pids[i]); 4302 oomAdj = proc != null ? proc.setAdj : 0; 4303 } 4304 } 4305 long[] tmpUss = new long[1]; 4306 pss[i] = Debug.getPss(pids[i], tmpUss); 4307 if (proc != null) { 4308 synchronized (this) { 4309 if (proc.thread != null && proc.setAdj == oomAdj) { 4310 // Record this for posterity if the process has been stable. 4311 proc.baseProcessTracker.addPss(pss[i], tmpUss[0], false, proc.pkgList); 4312 } 4313 } 4314 } 4315 } 4316 return pss; 4317 }
pss[i] = Debug.getPss(pids[i], tmpUss);get
Debug.getPss() 有兩個實現,帶參與不帶參。帶參的是獲取進程列表的內存。不帶參對應用可見,在應中,咱們就能夠用 Debug.getPss() 來獲取進程對標系統設置中的內存了。it
對了,這個單位是 kb,實際計算的時候要注意了。