微信內存優化詳談html
Android 官網的guidejava
官方註解android
如何減小體積web
內存優化須要理解的技術:數組
- hook gc來避免gc引發的memory churn的技術
- 常見的引發內存泄漏幾種狀況的解決
- 靜態屬性持有 activity 或者 view 等
- 內部類、匿名類持有activity或者view等外部類的引用
- Handler 提交msg的是否一個匿名的runnable 持有外部的引用
- Thread 和 timertask 因爲thread 和timertask 會另外啓動線程而線程在運行結束銷燬以前是當作gcroot的
- 某些系統服務 好比sensormanager須要持有activity的的引用以做回調的
- 資源未回收關閉 致使的問題
- webview
- 數據結構優化(arraymap等)
- 更換序列化方案
- view複用
- object pool等優化方法
- 內存相關的操做系統概念
- Android虛擬機heap space的結構和allocator的執行原理
爲何要優化內存,首先要下降應用的內存佔用,這樣有助於不被lmkiller 殺死,第二 提升應用的運行速度不會由於頻繁gc而變卡微信
LealCanary:使用弱應用檢查Activity的對象內存泄漏數據結構
能夠經過 在activity destroy的時候手動釋放各類資源,來避免activity泄漏致使activity所持有的資源沒有被釋放app
Drawable d = iv.getDrawable(); if (d != null) { d.setCallback(null); } iv.setImageDrawable(null);
圖片:ide
監控本身的內存使用優化
Runtime.getRuntime().maxMemory(); Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
這樣獲取到當前本身的內存佔用,到達一個筏值的時候 釋放一些資源好比 glide的釋放模塊
使用多進程,好比圖庫,好比webview所佔用的內存
large heap: application 節點之下 android:largeHeap = true
inBitmap: BitmapFactory.Option.inBitmap應用了這個option的image 將會使用同一個bitmap的地方
SparseArray:key一個數組 value一個數組 代替map
ArrayMap:key的hash 保存成一個數組,key-value相隔 保存成一個數組,先經過key的hash獲取到index 去讀第二個數組,若是找不到 說明 產生了碰撞
Protobuf:T-L-V ,varint byte 數組表示,能夠將一個較小的數用更低的位來代替 link
內存抖動,說明大量對象建立,大量對象被回收,頻繁gc 會卡
減小apk的包的體積將顯著減小內存的佔用
在保存png的質量的同時縮減 png的大小