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

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

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

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

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

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

  • 1虛擬機棧中引用的對象

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

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

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

延伸閱讀

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