在分析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引用的對象
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26