Android內(nèi)存測試雜談

本文章轉(zhuǎn)載于搜狗測試

當(dāng)軟件實現(xiàn)了新功能后,準(zhǔn)備發(fā)布版本前,必須進行性能測試以確定沒有性能問題,內(nèi)存使用情況便是其中必須要測試的性能之一。由于內(nèi)存組成的復(fù)雜性,并沒有簡單通用的方法能夠發(fā)現(xiàn)所有的內(nèi)存問題。有時候因為問題比較明顯,就真的發(fā)現(xiàn)了問題,但是對于較為成熟的軟件,并不是那么容易發(fā)現(xiàn)內(nèi)存問題?,F(xiàn)在從內(nèi)存測試流程、內(nèi)存測試方法、內(nèi)存占用的評判建議三個方面總結(jié)如下,希望能提升內(nèi)存測試的有效性。

內(nèi)存測試流程

以V8.8泛靈犀功能為例,介紹下這個流程中的要點:

1)代碼:保證進行泛靈犀內(nèi)存測試的版本是純凈版,沒有附加多余的Log和調(diào)試用組件

2)測試場景:V8.8泛靈犀功能是當(dāng)前新開發(fā)的功能,只需要對該功能進行性能測試,因此測試場景主要針對V8.8泛靈犀功能組織,包括該功能的開啟前、運行、結(jié)束后等測試點,即在輸入框中輸入要搜索的文字→點擊四葉草搜索→結(jié)果左右滑動→收起搜索結(jié)果;另一類是整體性能,考察應(yīng)用的常見場景,在綜合使用情況下的性能指標(biāo),測試場景應(yīng)當(dāng)包括啟動后待機、切換到后臺、執(zhí)行主要功能以及反復(fù)執(zhí)行各功能。在兩類場景中,重點關(guān)注:

①包含了圖片顯示的界面;

②網(wǎng)絡(luò)傳輸大量數(shù)據(jù);

③需要緩存數(shù)據(jù)的場景

3)場景轉(zhuǎn)換成用例:選取了測試場景之后,針對內(nèi)存測試的特點設(shè)計用例,通過①與V8.7版本泛靈犀功能的內(nèi)存變化作對比;②利用UIAutomator將測試場景轉(zhuǎn)化為腳本,長時間運行泛靈犀功能,比較操作前后內(nèi)存的變化來評估V8.8泛靈犀的內(nèi)存

4)執(zhí)行:將采集到的數(shù)據(jù)以圖形的形式展現(xiàn),觀察內(nèi)存的波動

5)分析:分析內(nèi)存時重點關(guān)注如下幾個字段:

①Native/Dalvik 的 Heap ,分別給出的是JNI層和Java層的內(nèi)存分配情況,如果發(fā)現(xiàn)這個值一直增長,

則代表程序可能出現(xiàn)了內(nèi)存泄漏;

②Total 的 PSS 信息,代表應(yīng)用真正占據(jù)的內(nèi)存大小,通過它可以判別手機中哪些程序占內(nèi)存比較大了。

其他評判方法可參考第三小節(jié):內(nèi)存占用評判建議

內(nèi)存測試方法

1)Android Studio自帶內(nèi)存檢測功能

可以方便地看出GC(垃圾回收)情況和明顯的內(nèi)存趨勢。如果存在明顯的內(nèi)存泄漏,就會表現(xiàn)為隨著功能的反復(fù)使用,內(nèi)存值不斷升高,即使出現(xiàn)GC也沒法降下來。測試時,重點關(guān)注兩點:①退出某個頁面后,內(nèi)存是否回落;②進行某個操作后,內(nèi)存增長的過快,需要反復(fù)操作進行確認(rèn)。

2)dumpsys meminfo

參數(shù)含義:

Naitve Heap Size:從mallinfo usmblks獲得,代表最大總共分配空間

Native Heap Alloc:從mallinfo uorblks獲得,總共分配空間

Native Heap Free:從mallinfo fordblks獲得,代表總共剩余空間

Native Heap Size約等于Native Heap Alloc + Native HeapFree

Dalvik Heap Size:從Runtime totalMemory()獲得,Dalvik Heap總共的內(nèi)存大小。

Dalvik Heap Alloc: Runtime totalMemory()-freeMemory(),Dalvik Heap分配的內(nèi)存大小。

Dalvik Heap Free:從Runtime freeMemory()獲得,Dalvik Heap剩余的內(nèi)存大小。

Dalvik Heap Size約等于Dalvik? HeapAlloc +Dalvik? Heap Free

3)使用ActivityManager.getMemoryInfo()方法獲得內(nèi)存信息

搜狗哆啦A夢中的性能監(jiān)控工具就是通過該方法獲取應(yīng)用的內(nèi)存和cpu,相關(guān)代碼如下:

性能監(jiān)控工具使用步驟:

①下載哆啦A夢工具并安裝http://duola.sogou.com/;

②切換到設(shè)置頁面,點擊“被測應(yīng)用設(shè)置”,在應(yīng)用列表中選擇要監(jiān)控的應(yīng)用程序,設(shè)為被測應(yīng)用;

③切換到工具頁面,點擊+按鈕;

④在通用工具里找到性能監(jiān)控工具,點擊“添加”;

⑤點擊性能監(jiān)控,在如下頁面中可以設(shè)置數(shù)據(jù)采樣頻率,還可以查看內(nèi)存變化趨勢/查看CPU占用變化趨勢/查看流量耗用情況;

⑥開啟懸浮窗,可以實時看到內(nèi)存的變化/CPU的變化/應(yīng)用流量;

⑦測試完成后,點擊“停止測試”,性能測試數(shù)據(jù)保存在sdcard/DoraemonBox/PerformanceTest下,可以從里面獲取內(nèi)存信息。

內(nèi)存占用評判建議

最初通過哆啦A夢的性能監(jiān)控工具進行性能評測時,得出的結(jié)果不知道內(nèi)存cpu波動是否在預(yù)期之內(nèi),不懂得如何評估。經(jīng)過了解,可以從以下幾個方面考慮:

1)首先與有該功能的以往版本和競品做對比,得出內(nèi)存的差值

比如搜狗輸入法每個版本都會做內(nèi)存占用評測,對比搜狗輸入法與以往版本

及競爭對手在內(nèi)存上的消耗量,通過內(nèi)存的差值可以較為直觀地判斷出該版本的內(nèi)存占用情況。下圖是搜狗輸入法8.5版本與之前8.4版本和競品的內(nèi)存消耗對比

2)若之前版本和競品都無該功能,可將應(yīng)用的基本功能消耗的內(nèi)存作為參考

比如8.5泛靈犀,這是一個全新的功能,且競品也沒有該功能,將隨機打字消耗的內(nèi)存作為參考,比較泛靈犀的內(nèi)存相對于正常的打字是否有較大的增長。下圖是搜狗輸入法8.5泛靈犀主動情況下與隨機打字的內(nèi)存消耗對比

3)內(nèi)存有無泄漏

判斷內(nèi)存是否泄漏的方法是:①在測試過程中是否存在因為內(nèi)存不足導(dǎo)致的應(yīng)用crash;②內(nèi)存是否存在持續(xù)上漲的情況。針對上圖泛靈犀主動情況下的內(nèi)存占用,可從內(nèi)存有無泄漏角度分析:泛靈犀主動情況下對圖片和動圖進行操作時,內(nèi)存增長30%-40%,但退出圖片和動圖后內(nèi)存回降,并且在測試過程中不存在因為內(nèi)存不足導(dǎo)致的應(yīng)用崩潰,測試過程中沒有內(nèi)存泄漏,經(jīng)溝通符合預(yù)期。

4)內(nèi)存峰值是否在單個應(yīng)用所允許的最大值之內(nèi)

最大值可參考:①手機硬件配置;②系統(tǒng)所允許的最大值;③相比類似應(yīng)用的峰值。在手機的設(shè)置→用用程序管理器→應(yīng)用程序信息中可以看到應(yīng)用所占用的手機內(nèi)存大小。若某個功能的內(nèi)存峰值小于該應(yīng)用所占內(nèi)存,基本是符合預(yù)期的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,008評論 25 709
  • 一.操作系統(tǒng)相關(guān)基礎(chǔ)知識 1.物理內(nèi)存、虛擬內(nèi)存、邏輯地址與交換空間 物理內(nèi)存(RAM):加載到內(nèi)存地址寄存器中的...
    Geeks_Liu閱讀 9,481評論 6 31
  • 1、內(nèi)存了解 在Android App的性能優(yōu)化的各個部分里,內(nèi)存方面的知識較多且不易理解,內(nèi)存的問題絕對是最令人...
    蕭竹閱讀 9,077評論 1 12
  • 今天回顧了下這個直播 優(yōu)化TableView滑動體驗,其中前面講的影響性能的點的印象比較深刻,特此記錄。 一、較多...
    天空中的球閱讀 893評論 2 10
  • 感覺還是不錯的 也沒有想象的那么累 堅持下去 不過今年事情還是比較多的 希望都能夠一件一件的解決吧 重要是得拿到畢...
    龍跡MainiK閱讀 185評論 0 1

友情鏈接更多精彩內(nèi)容