- 移動App性能評測與優(yōu)化
- TMQ專項測試團隊
- 395字
- 2019-01-03 21:41:04
1.3.1 Dalvik Heap內部機制
為了弄清楚為什么DVM占著內存不釋放,我們閱讀了DVM分配內存部分的代碼。位置在Android源碼的dalvik/vm/alloc下,約255KB。分析的主要流程如下:
1)DVM使用mmap系統(tǒng)調用從系統(tǒng)分配大塊內存作為Java Heap。根據(jù)系統(tǒng)機制,如果分類的內存尚未真正使用,就不計入PrivateDirty和Pss。例如圖1-8所示,Heap Size/Alloc很多,但大部分是共享的,實際使用的較少。所以反映到PrivateDirty/Pss里的內存并不多。

圖1-8 共享內存較多的進程
2)新建對象之后,由于要向對應的地址寫入數(shù)據(jù),內核開始真正分配該地址對應的4KB物理內存頁面。
Alloc.cpp中,從第176行起的代碼如圖1-9所示。

圖1-9 DVM虛擬機分配內存的代碼
3)運行一段時間后,開始垃圾回收(GC),有些對象被回收了,有些會一直存在,如圖1-10所示。

圖1-10 黑點表示的內存會被回收
4)在GC時,有可能會進行trim,即將空閑的物理頁面釋放回系統(tǒng),表現(xiàn)為PrivateDirty/Pss下降。HeapSource.cpp中,第431行代碼如圖1-11所示。

圖1-11 釋放內存回系統(tǒng)的代碼(一)
HeapSource.cpp中,第1304行代碼如圖1-12所示。

圖1-12 釋放內存回系統(tǒng)的代碼(二)
推薦閱讀
- 走進移動支付
- 電子商務信息服務模式研究:基于臨港制造業(yè)需求
- 漁業(yè)電子商務
- 社群營銷
- 淘寶網店頁面設計、布局、配色、裝修一本就夠(最新實戰(zhàn)版)
- 旅游電子商務理論及應用
- 移動互聯(lián)網之巔:騰訊VS阿里巴巴
- 贏在互聯(lián)網思維:15位網絡創(chuàng)富精英如是說
- 微商引流爆粉實戰(zhàn)手冊:全網引流實戰(zhàn)300招
- 網絡零售
- 跨界:打通線上線下,構建商業(yè)閉環(huán)
- 成為淘寶創(chuàng)業(yè)的超級畢業(yè)生
- 淘寶客服超級口才訓練與實用技巧:網店銷售中的144個經典溝通實例
- 生鮮電商的新零售之路
- 微信營銷解密:移動互聯(lián)網時代的營銷革命(微信營銷布道者和理論奠基人撰寫,系統(tǒng)闡述微信營銷原則、方法、