天天看點

Android記憶體優化—記憶體洩漏、記憶體抖動、記憶體溢出

記憶體洩漏

當某些對象不再被程式所使用,但是這些對象仍然被某些對象所引用着,進而導緻垃圾收集器不能及時釋放它們。

記憶體洩露 指由于疏忽或錯誤造成程式未能釋放已經不再使用的記憶體。

解決辦法:在不需要的時候及時釋放掉資源

記憶體抖動

記憶體抖動 指記憶體頻繁地配置設定和回收

後果

1、頻繁的GC會導緻卡頓

2、嚴重時還會導緻OOM

注:記憶體抖動為什麼會引起OOM呢?

主要原因還是有因為大量小的對象頻繁建立,導緻記憶體碎片,進而當需要配置設定記憶體時,雖然總體上還是有剩餘記憶體可配置設定,而由于這些記憶體不連續,導緻無法配置設定,系統直接就傳回OOM了。

解決方案

1、盡量避免在循環體内建立對象,應該把對象建立移到循環體外

2、避免在View的onDraw()方法裡頻繁地建立對象

3、對于能夠複用的對象,可以使用對象池将它們緩存起來

記憶體溢出

記憶體溢出 指應用申請超過門檻值的記憶體空間

産生原因

1、應用存在記憶體洩露,長時間積累導緻OOM

2、應用的某些邏輯操作瘋狂的消耗掉大量記憶體

解決方案

1、規避記憶體洩漏

2、圖檔進行壓縮顯示或局部顯示