標籤:測試 效能測試 記憶體流失 android應用 android
1.什麼是記憶體流失? 記憶體流失就是向系統申請記憶體使用量,卻不歸還(釋放),導致該記憶體既不能被自己使用也不能被別人使用。2.記憶體流失和記憶體溢出有什麼區別? 記憶體流失是分配出去的記憶體無法回收。 記憶體溢出是程式使用的記憶體超出了系統能給予的。3.如何從測試資料中得出記憶體流失? 首先,我們需要使用效能測試工具去監控效能資料,android可使用GT.apk(:http://gt.tencent.com/)監控記憶體資料。然後,對測試對象連續重複做完全相同的操作多次。然後,將測試結果(記憶體)製作成折線圖。如果幾次完全相同的操作中,記憶體持續增長,那麼可以判定記憶體流失。4.導致記憶體流失的原因? android記憶體流失的終極原因就是多線程程式反覆申請釋放記憶體,但是釋放的和申請的不對應,導致吃記憶體。 詳見宋寶華的部落格http://blog.csdn.net/21cnbao/article/details/7706671。以下為部落格原文: 記憶體泄露分為兩種境界,一個是人死了,錢還沒花完,你malloc的記憶體還沒釋放進程就死了,我們說,這個問題在Linux不存在,進程是個資源封裝的單位,進程掛的時候,資源會被核心釋放掉的,死的時候還僅僅有個殭屍而已。第二個境界是,人活著,錢沒了,這個問題才是Linux真正擔心的,一個多線程的程式,運行過程中反覆申請和釋放記憶體,但是釋放的與申請的不對應,就慢慢地吃記憶體,這個進程的記憶體消耗曲線振蕩上升,直到耗盡記憶體。所以,在Linux世界裡,我們不用擔心人死了,錢還沒花完的問題 ,黨會幫我們處理的。我們要擔心的是,人活著,錢沒了的問題。
所以,能早結束的進程早點結束,多線程中該釋放的記憶體儘早釋放。 不瞭解進程和線程的童鞋可以參考此文章,非常簡單明了 : http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 5.如何避免記憶體流失? 1.長期保持了context對象的引用。可參考官方部落格:http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html。 引用譯文:在Android應用程式中,很多操作都用到了Context對象,但是大多數都是用來載入和訪問資源的。這就是為什麼所有的顯示控制項都需要一個Context對象作為構造方法的參數。在Android應用程式中通常可以使用兩種Context對象:Activity和Application。當類或方法需要Context對象的時候常見的作法是使用第一個作為Context參數。但這就意味著View對象對整個activity保持引用,因此也就保持對activity內的所有東西的引用,也就是整個View結構和它所有的資源都無法被及時的回收,而且對activity的長期引用是比較隱形。 2.其他情況可參考這個博文,寫的挺詳細,我還沒來得及看,看完之後再簡單分析一下。 Android之記憶體流失調試學習與總結http://mzh3344258.blog.51cto.com/1823534/895093
android效能測試之記憶體流失