一、內(nèi)存管理機(jī)制概述
1.分配機(jī)制 :操作系統(tǒng)會(huì)為每一個(gè)進(jìn)程分配一個(gè)合理的內(nèi)存大小筛圆,從而保證每一個(gè)進(jìn)程能正常的運(yùn)行裂明。而不至于內(nèi)存不夠使用,或者每個(gè)進(jìn)程占用太多的內(nèi)存顽染。
2.回收機(jī)制 :在系統(tǒng)內(nèi)存不足的時(shí)候漾岳,會(huì)有一個(gè)合理的回收而再分配內(nèi)存資源的一個(gè)機(jī)制轰绵,從而保證新的進(jìn)程能夠正常運(yùn)行粉寞。回收的時(shí)候就要?dú)⑺滥切┱谡加袃?nèi)存的進(jìn)程左腔。
二唧垦、Android內(nèi)存管理機(jī)制
1.分配機(jī)制 :采用彈性的機(jī)制,一開(kāi)始不會(huì)為app分配太多的內(nèi)存液样,而是給每一個(gè)app進(jìn)程分配一個(gè)小額的量振亮,這個(gè)小額的量是由硬件RAM尺寸大小來(lái)決定的,隨著app不斷地運(yùn)行鞭莽,當(dāng)app的內(nèi)存不夠使用坊秸,Android會(huì)為每一個(gè)進(jìn)程分配額外的內(nèi)存大小。
2.回收機(jī)制 :當(dāng)前內(nèi)存不夠的時(shí)候澎怒,Android會(huì)殺死其他的進(jìn)程褒搔,回收足夠的內(nèi)存,從而開(kāi)啟新進(jìn)程⌒邱回收的時(shí)候會(huì)按照進(jìn)程的優(yōu)先級(jí)走孽,并按照LRU(最近最久未使用)機(jī)制回收內(nèi)存。
三琳状、內(nèi)存管理機(jī)制的特點(diǎn)
1.更少的占用內(nèi)存磕瓷。
2.在合適的時(shí)候,合理的釋放系統(tǒng)資源念逞。
3.在系統(tǒng)內(nèi)存緊張的情況下困食,能釋放大部分不重要的資源,來(lái)為Android系統(tǒng)提供可用的內(nèi)存翎承。
4.能夠很合理的在特殊生命周期中陷舅,保存或者還原重要數(shù)據(jù),以至于系統(tǒng)能夠正確的重新恢復(fù)該應(yīng)用审洞。
四莱睁、內(nèi)存優(yōu)化方法
1.當(dāng)Service完成任務(wù)之后,盡量停止它芒澜。Service是運(yùn)行在主線程的不能做耗時(shí)操作仰剿,需要手動(dòng)退出;而IntentService是運(yùn)行在子線程的痴晦,可以進(jìn)行耗時(shí)操作南吮,并會(huì)自動(dòng)退出。
2.當(dāng)UI不可見(jiàn)的時(shí)候誊酌,釋放掉一些只有UI使用的資源部凑。
3.在系統(tǒng)內(nèi)存緊張的時(shí)候,盡可能多的釋放掉一些非重要資源碧浊。
4.避免濫用Bitmap導(dǎo)致的內(nèi)存浪費(fèi)涂邀。
5.使用針對(duì)內(nèi)存優(yōu)化過(guò)的數(shù)據(jù)容器,比如使用HashArray替代HashMap箱锐。
6.避免使用依賴注入框架比勉。
7.使用zip對(duì)齊的apk。
8.使用多進(jìn)程驹止,把長(zhǎng)期運(yùn)行在后臺(tái)的模塊移入到單獨(dú)的進(jìn)程中浩聋。
五、內(nèi)存溢出VS內(nèi)存泄漏
1.內(nèi)存溢出 :當(dāng)前占用的內(nèi)存加上申請(qǐng)的內(nèi)存資源超過(guò)了Dalvik虛擬機(jī)的最大內(nèi)存限制就會(huì)拋出的Out of memory異常臊恋。
2.內(nèi)存泄漏 :應(yīng)該被回收的對(duì)象沒(méi)有被回收衣洁,被其他的類或?qū)嵗茫斐蒅C無(wú)法回收抖仅。