Android內(nèi)存分析

內(nèi)存表達(dá)方式

  • VSS- Virtual Set Size 虛擬耗用內(nèi)存(包含共享庫占用的內(nèi)存)
  • RSS- Resident Set Size 實(shí)際使用物理內(nèi)存(包含共享庫占用的內(nèi)存)
  • PSS- Proportional Set Size 實(shí)際使用的物理內(nèi)存(比例分配共享庫占用的內(nèi)存)
  • USS- Unique Set Size 進(jìn)程獨(dú)自占用的物理內(nèi)存(不包含共享庫占用的內(nèi)存)

我們在Android手機(jī)的設(shè)置頁面看到的內(nèi)存占用情況羔味,就是使用了PSS標(biāo)準(zhǔn)捐凭。同時在內(nèi)存優(yōu)化過程中娃惯,也經(jīng)常被用作衡量指標(biāo)。

PSS內(nèi)存查看方式

  • adb shell dumpsys meminfo
  • 手寫測試程序:
    • activitymanager.getRunningAppProcesses():
    • memoryinfo[0].getTotalPss():

dumpsys meminfo詳述

dumpsys-meminfo.png

接下來茧吊,我們對上圖中的信息做詳細(xì)說明:

  • Dalvik Heap
    在app中由Dalvik申請的內(nèi)存竹挡。
    Pss Total包含了Zygote申請的內(nèi)存(只不過Pss是按照共享數(shù)均分給每個進(jìn)程)液兽。

這里做下說明庶弃,android下所有app的進(jìn)程均是fork自Zygote,從Zygote進(jìn)程 fork 時尺碰,子進(jìn)程完全拷貝了Zygote進(jìn)程的虛擬內(nèi)存空間(包括加載的so占用挣棕、resource資源占用、主動申請等內(nèi)存空間等)亲桥。但當(dāng)繼承自Zygote進(jìn)程的內(nèi)存被修改時洛心,由于copy-on-write,會申請新的內(nèi)存空間题篷,這就會形成Private Dirty內(nèi)存词身。當(dāng)繼承自Zygote進(jìn)程的內(nèi)存沒被修改時,是不用分配額外的內(nèi)存空間番枚。

  • Private Dirty
    它是app自己提交的內(nèi)存總數(shù)法严,包含了app自己主動申請的和修改了的繼承自Zygote的內(nèi)存。
    其實(shí)葫笼,Private Dirty表示了該進(jìn)程私有的深啤,不跟disk數(shù)據(jù)一致的內(nèi)存段施戴。例如堆(heap)厂抖,棧(stack),bss段帘瞭。

    注:在新平臺上,用于管理Dalvik的內(nèi)存(如呈昔, just-in-time compilation (JIT) and GC bookkeeping)不再像以前一樣歸到 Dalvik Heap挥等,而是歸類到 Dalvik Other。

  • Heap Size/Alloc/Free
    Heap Alloc是(Dalvik堤尾、native)app申請的內(nèi)存記錄肝劲,包括了Private Dirty和繼承自Zygote的(多進(jìn)程共享的)內(nèi)存。所以哀峻,它是比Pss Total和Private Dirty都要大的涡相。

  • Private clean
    它包括該進(jìn)程獨(dú)自使用的so和dex哲泊。Clean內(nèi)存的好處是在內(nèi)存緊張時剩蟀,可以釋放物理內(nèi)存。因為是clean的切威,所以不需要寫回到disk育特,只需要下次讀取該內(nèi)存(導(dǎo)致缺頁錯誤)時再從disk讀入。

  • Shared Clean
    它表示多個進(jìn)程共享的so和dex先朦。關(guān)于so庫的加載缰冤,第一次是以MAP_PRIVATE參數(shù) mmap so,內(nèi)存都是private clean的喳魏。如果另外一個進(jìn)程mmap了同一個so棉浸,就變成shared clean了。

DDMS:MemoryMonitor

Android自帶的內(nèi)存查看工具刺彩,查看的是Dalivik Heap Size/Alloc/Free迷郑。

內(nèi)存優(yōu)化工具:MAT

強(qiáng)大的內(nèi)存分析工具,MAT创倔,分析的文件hprof文件有以下獲取方式(都需要使用hprof-conv工具轉(zhuǎn)換):

  • DDMS 中dump出來
  • 函數(shù):dumpHprofData()生成

使用MAT分析內(nèi)存時嗡害,會遇到一些術(shù)語比較難懂的術(shù)語,這里簡單說明下:

  • RetainedHeap:
    它表示如果一個對象被釋放掉畦攘,那會因為該對象的釋放而減少引用進(jìn)而被釋放的所有的對象(包括被遞歸釋放的)所占用的heap大小霸妹。(又開始Histogram中不顯示Retained heap,需要點(diǎn)擊那個計算器的按鈕才會計算出來)知押。這里最小的粒度是類級別的叹螟。

  • Dominator Tree:
    它表示對象引用樹(原來是用圖表示對象引用關(guān)系)。

  • MAT中點(diǎn)擊右鍵

    • 在List objects中選擇with outgoing references和with incoming references台盯。這是個真正的引用圖的概念首妖,表示該對象的出節(jié)點(diǎn)(被該對象引用的對象)和入節(jié)點(diǎn)(引用到該對象的對象)。
    • Path to GC Roots:GC roots是可能導(dǎo)致GC的節(jié)點(diǎn)爷恳。這個Path則是從這些GC root節(jié)點(diǎn)中的某個到當(dāng)前對象的最短引用路徑有缆。對這個如何計算不是很確定,我想應(yīng)該是根據(jù)引用樹而不是dominator tree。

參考:
https://developer.android.com/studio/profile/investigate-ram.html#LogMessages
https://www.youtube.com/watch?v=ptjedOZEXPM

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棚壁,一起剝皮案震驚了整個濱河市杯矩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌袖外,老刑警劉巖史隆,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異曼验,居然都是意外死亡泌射,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門鬓照,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熔酷,“玉大人,你說我怎么就攤上這事豺裆【苊兀” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵臭猜,是天一觀的道長躺酒。 經(jīng)常有香客問我,道長蔑歌,這世上最難降的妖魔是什么羹应? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮次屠,結(jié)果婚禮上园匹,老公的妹妹穿的比我還像新娘。我一直安慰自己帅矗,他們只是感情好偎肃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浑此,像睡著了一般累颂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凛俱,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天紊馏,我揣著相機(jī)與錄音,去河邊找鬼蒲犬。 笑死朱监,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的原叮。 我是一名探鬼主播赫编,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼巡蘸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了擂送?” 一聲冷哼從身側(cè)響起悦荒,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘹吨,沒想到半個月后搬味,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蟀拷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年碰纬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片问芬。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡悦析,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出愈诚,到底是詐尸還是另有隱情她按,我是刑警寧澤牛隅,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布炕柔,位于F島的核電站,受9級特大地震影響媒佣,放射性物質(zhì)發(fā)生泄漏匕累。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一默伍、第九天 我趴在偏房一處隱蔽的房頂上張望欢嘿。 院中可真熱鬧,春花似錦也糊、人聲如沸炼蹦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掐隐。三九已至,卻和暖如春钞馁,著一層夾襖步出監(jiān)牢的瞬間虑省,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工僧凰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留探颈,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓训措,卻偏偏與公主長得像伪节,于是被迫代替她去往敵國和親光羞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容