手游性能之內存分析


今天在研究android應用的內存,紀錄一下,以便后續查閱。

注:文中圖片地址來源於:http://myeyeofjava.iteye.com/blog/1837860,借用一下,兄弟,懶得自己畫了

 

android內存主要有四種形式:VSS 、RSS 、PSS 、 USS

一般來說內存占用大小有如下規律:VSS >= RSS >= PSS >= USS

VSS:Virtual Set Size,虛擬耗用內存。它是一個進程能訪問的所有內存空間地址的大小。這個大小包含了
一些沒有駐留在RAM中的內存,就像mallocs已經被分配,但還沒有寫入。VSS很少用來測量程序的實際使
用內存。


RSS:Resident Set Size,實際使用物理內存。RSS是一個進程在RAM中實際持有的內存大小。RSS可能會
產生誤導,因為它包含了所有該進程使用的共享庫所占用的內存,一個被加載到內存中的共享庫可能有很
多進程會使用它。RSS不是單個進程使用內存量的精確表示。


PSS:Proportional Set Size,實際使用的物理內存,它與RSS不同,它會按比例分配共享庫所占用的內存。
例如,如果有三個進程共享一個占30頁內存控件的共享庫,每個進程在計算PSS的時候,只會計算10頁。
PSS是一個非常有用的數值,如果系統中所有的進程的PSS相加,所得和即為系統占用內存的總和。當一個
進程被殺死后,它所占用的共享庫內存將會被其他仍然使用該共享庫的進程所分擔。在這種方式下,PSS
也會帶來誤導,因為當一個進程被殺后,PSS並不代表系統回收的內存大小。


USS:Unique Set Size,進程獨自占用的物理內存。這部分內存完全是該進程獨享的。USS是一個非常有用
的數值,因為它表明了運行一個特定進程所需的真正內存成本。當一個進程被殺死,USS就是所有系統回
收的內存。USS是用來檢查進程中是否有內存泄露的最好選擇。

 

screenshot          screenshot

screenshot        screenshot

 

由於手游在開發過程中可能會使用到共享庫,所以個人覺得查看手游內存信息的時候使用pss作為內存指標比較合理。通過查看騰訊對外的測試平台(wetest)報告發現騰訊使用的內存指標也是PSS

image

 

最后付一個.bat腳本用於實時查看某一應用的實時pss內存指標

set process=com.xxxx.xxxx.xxxx             #需要測試的進程名

@adb shell dumpsys meminfo %process% | findstr "Pss"        

:m

@adb shell dumpsys meminfo %process% | findstr "TOTAL"  

@ping -n 5 127.1>nul
@goto m


免責聲明!

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



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