Android 避免內(nèi)存泄漏-引用模式

概念

  • 內(nèi)存泄露:Android 為每個(gè)應(yīng)用分配了一定大小的內(nèi)存,JVM會(huì)定時(shí)的回收它認(rèn)為沒(méi)有用的內(nèi)存,當(dāng)代碼不規(guī)范時(shí)會(huì)導(dǎo)致一些內(nèi)存無(wú)法被回收占用沒(méi)存資源,當(dāng)內(nèi)存資源不足時(shí)一些內(nèi)存也無(wú)法被回收,JVM就會(huì)拋出內(nèi)存泄漏異常
  • 內(nèi)存溢出:Android 為每個(gè)應(yīng)用分配了一定大小的內(nèi)存,當(dāng)Android應(yīng)用new出一個(gè)對(duì)象時(shí)會(huì)向系統(tǒng)申請(qǐng)內(nèi)存,這時(shí)如果系統(tǒng)分配給應(yīng)用的內(nèi)存不足(內(nèi)存泄露導(dǎo)致內(nèi)存無(wú)法釋放一直占用內(nèi)存資源)就會(huì)拋出內(nèi)存溢出異常

引用模式

  • 強(qiáng)引用:對(duì)象只要有引用就不會(huì)被回收

Object obj = new Object()

  • 軟引用:當(dāng)系統(tǒng)發(fā)現(xiàn)快要發(fā)生內(nèi)存溢出時(shí),會(huì)回收該類(lèi)的對(duì)象。
    可以配合引用隊(duì)列ReferenceQueue聯(lián)合使用,如果軟引用所引用的對(duì)象被回收掉JVM會(huì)把該軟引用存放到已關(guān)聯(lián)的ReferenceQueue中,等到系統(tǒng)將要拋出OutOfMemoryError的時(shí)候就會(huì)去回收ReferenceQueue中的軟引用(ReferenceQueue回收機(jī)制是優(yōu)先回收不常用的)

new Handler(new SoftReference<>(activity))

  • 弱引用:jvm會(huì)不定時(shí)gc,在下一次GC時(shí)會(huì)被回收

new Handler(new WeakReference<>(activity))

  • 虛引用:引用關(guān)系最弱的

new Handler(new PhantomReference<>(activity))

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

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

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