在分析Android內(nèi)存泄漏之前,先了解一下JAVA的一些知識
1. JAVA中的對象的創(chuàng)建

  • 使用new指令生成對象時,堆內(nèi)存將會為此開辟一份空間存放該對象
    垃圾回收器回收非存活的對象,并釋放對應(yīng)的內(nèi)存空間

2.Java如何判定對象存活或死亡?

  • 可達(dá)性分析算法
    1給對象中添加一個引用計數(shù),假如為count
    2當(dāng)引用這個對象時:count++
    3當(dāng)count==0時:對象處于,也就是說沒有其它地方在引用這個對象了,對象就處于“死亡”狀態(tài),回收對象

  • 可達(dá)性分析算法
    舉個例子:像找人一樣,A認(rèn)識B,B認(rèn)識C,C認(rèn)識D,那么A就要吧通過這樣的關(guān)系認(rèn)識D,如果能找到D,說明D對象是存活的,不能回收,如果通過所有的關(guān)系都找不到D,說明D是“死亡”的,回收D對象。
    可達(dá)性分析算法的定義:通過一系列的稱為 GC
    Roots 的對象作為起點(diǎn),從這些節(jié)點(diǎn)開始向下搜索,搜索把走過的路徑稱為引用鏈,當(dāng)一個對象到 GC Roots 沒有任何引用鏈相連(就是從GC Roots 到這個對象不可達(dá))時,則證明此對象是不可用的。如下圖,Object5,Object6,Object7就是不可達(dá)對象,是要被回收的對象

問:哪些對象可以作為GC Roots對象呢?

  • 1虛擬機(jī)棧中引用的對象

  • 2方法區(qū)中類靜態(tài)屬性引用的對象

  • 3方法區(qū)中常量引用的對象

  • 4本地方法棧中JNI引用的對象

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式