android內存耗用:VSS/RSS/PSS/USS


VSS- Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)

         不是真實當前應用進程所占用的內存。

    

內存分配的原理

從操作系統角度來看,進程分配內存有兩種方式,分別由兩個系統調用完成:brk和mmap(不考慮共享內存)。

1、brk是將數據段(.data)的最高地址指針_edata往高地址推;

2、mmap是在進程的虛擬地址空間中(堆和棧中間,稱為文件映射區域的地方)找一塊空閑的虛擬內存

     這兩種方式分配的都是虛擬內存,沒有分配物理內存在第一次訪問已分配的虛擬地址空間的時候,

發生缺頁中斷,操作系統負責分配物理內存,然后建立虛擬內存和物理內存之間的映射關系。

 

在標准C庫中,提供了malloc/free函數分配釋放內存,這兩個函數底層是由brk,mmap,munmap這些系統調用實現的。

情況一、malloc小於128k的內存,使用brk分配內存,將_edata往高地址推(只分配虛擬空間,不對應物理內存(因此沒有初始化),

第一次讀/寫數據時,引起內核缺頁中斷,內核才分配對應的物理內存,然后虛擬地址空間建立映射關系)

情況二、malloc大於128k的內存,使用mmap分配內存,在堆和棧之間找一塊空閑內存分配(對應獨立內存,而且初始化為0)

 

RSS- Resident Set Size 實際使用物理內存(包含共享庫占用的內存)

這個包含共享庫所占用的物理內存,即使這個共享庫被多個進程使用

PSS- Proportional Size 實際使用的物理內存(比例分配共享庫占用的內存)

按比例包含共享庫所占用的內存,比如有9k的共享庫被3個進程使用,那個當前進程所占

用的大小被計算為9/3k,也就是3k

USS- Unique Set Size 進程獨自占用的物理內存(不包含共享庫占用的內存)

當前進程,當前所有在用的物理內存

 

 

top  | grep app名稱

ps  |  grep app名稱

procrank | grep app名稱

一般的android沒有此命令,需要去下載一個,或者下載源碼,編譯安裝。

dumpsys meminfo app名稱

前兩個命令只能查到VSS RSS內存占用信息

而后面兩個命令可以查出  PSS USS內存占用.

dumpsys meminfo 可以查出native和dalvik分別占用多少內存

 

dumpsys 用來給出手機中所有應用程序的信息,並且也會給出現在手機的狀態。

dumpsys [Option]

               meminfo 顯示內存信息

               cpuinfo 顯示CPU信息

               account 顯示accounts信息

               activity 顯示所有的activities的信息

               window 顯示鍵盤,窗口和它們的關系

               wifi 顯示wifi信息

 

android 自帶的DDMS進行APP內存使用分析

Heap analzy

allocation analzy

Heap PROF FILE

通過MAT分析配置文件

MAT install site

http://download.eclipse.org/mat/1.2/update-site/

還可以通過trace view進行性能分析。。。


免責聲明!

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



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