Java引用類型
Java數(shù)據(jù)類型分為基本數(shù)據(jù)類型(如 int, byte)樟插、引用數(shù)據(jù)類型(如 String),基本數(shù)據(jù)類型直接存儲(chǔ)在堆內(nèi)存中葛躏,引用數(shù)據(jù)類型的存儲(chǔ)包括堆內(nèi)存與棧內(nèi)存洞拨,該類型的對(duì)象存儲(chǔ)在棧內(nèi)存中关翎,對(duì)象的引用存儲(chǔ)在堆內(nèi)存中。
Java引用數(shù)據(jù)類型包括一下4種:
- 強(qiáng)引用(StrongReference):默認(rèn)的類型沐祷,也是最常見的引用類型嚷闭,強(qiáng)引用的類型不會(huì)被GC回收;
- 軟引用(SoftReference):當(dāng)內(nèi)存充足時(shí)赖临,不會(huì)被回收胞锰,當(dāng)內(nèi)存不足時(shí),會(huì)回收兢榨,正因?yàn)檐浺玫倪@個(gè)特性嗅榕,其適合做一些緩存處理。
- 弱引用(WeakReference):無(wú)論內(nèi)存是否充足吵聪,GC時(shí)一定會(huì)被回收凌那;
- 虛引用(PhantomReference):無(wú)法通過(guò)虛引用訪問(wèn)對(duì)象,虛引用等于沒有引用吟逝。
Android 應(yīng)用內(nèi)存
當(dāng)使用強(qiáng)引用導(dǎo)致堆內(nèi)存過(guò)大, 超過(guò)系統(tǒng)閥值時(shí)帽蝶,因其不可回收,Android會(huì)直接OOM.
Android設(shè)備的內(nèi)存可以通過(guò) /proc/meminfo
查看块攒。
Android 設(shè)備分配給應(yīng)用的堆內(nèi)存大小励稳,可以通過(guò)代碼獲取
public void getHeapMemoryInfo() {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
int largeMemory = am.getLargeMemoryClass();
int memory = am.getMemoryClass();
Logger.d("large memory:" + largeMemory);
Logger.d("memory:" + memory);
}
通過(guò)清單文件中的 largeheap=true可以申請(qǐng)到更大的堆內(nèi)存佃乘,但在一些嚴(yán)格限制的機(jī)型上,不一定有效驹尼。
Android 內(nèi)存泄漏分析
- MAT
- LeakCanary
~~~~~~~~困了趣避,有空再寫吧