0 內(nèi)存泄漏
-
LeakCanary工具
LeakCanary是大名鼎鼎的square出的一款開源的用來做內(nèi)存泄露檢測(cè)的工具
具體用法看上面鏈接氓鄙,整體用下來就這一個(gè)就可以了诅需,很強(qiáng)大! - 單例模式中內(nèi)存泄露,比如static的context
- 注冊(cè)的接口、觀察者模式等add/remove沒有成對(duì)出現(xiàn)導(dǎo)致的內(nèi)存泄露
- cursor耘成、file io等流接口忘記關(guān)閉導(dǎo)致的內(nèi)存泄露
- Handler、AsyncTask等內(nèi)部類導(dǎo)致的內(nèi)存泄露
- bitmap回收荷辕,集合中對(duì)象回收凿跳,webview銷毀等情況導(dǎo)致的內(nèi)存泄露
1 內(nèi)存優(yōu)化
使用CPU GPU Memory Montor等AS自帶工具,來時(shí)刻觀察內(nèi)存使用情況疮方,使用HPROF Viewer & Analyzer來分析hprof文件
- java語法層面
比如String StringBuffer StringBuilder,“1” 不是來源對(duì)象就用String茧彤,否則StringBuilder骡显,線程安全就是StringBuffer - 數(shù)據(jù)結(jié)構(gòu)
SparseArray、LongSparseArray、ArrayMap等代替HashMap惫谤,前提是數(shù)據(jù)量不大在千個(gè)級(jí)別壁顶,因?yàn)楸苊饬俗詣?dòng)裝箱,使用了二分查找等方法溜歪,所以效率高 - 根據(jù)業(yè)務(wù)情況選擇數(shù)據(jù)結(jié)構(gòu)
比如數(shù)據(jù)新增若专、刪除比較多就用LinkedList,動(dòng)態(tài)數(shù)據(jù)訪問比較多就用ArrayList - 根據(jù)業(yè)務(wù)情況選擇算法
普通遍歷蝴猪、二分查找调衰、快排等 - 避免創(chuàng)建不必要的對(duì)象
比如循環(huán)中避免創(chuàng)建大量不可變對(duì)象,使用緩存來避免創(chuàng)建大量對(duì)象 - 盡量不用浮點(diǎn)型
- 未完待續(xù)