一:區(qū)別:
? ? ? ? ? ? ?1)內(nèi)存溢出 out of memory:是指程序在申請(qǐng)內(nèi)存時(shí),沒(méi)有足夠的內(nèi)存空間供其使用结榄,出現(xiàn)out of memory中贝;比如申請(qǐng)了一個(gè)integer,但給它存了long才能存下的數(shù),那就是內(nèi)存溢出臼朗。
? ? ? ? ? ? ? ? ?2)內(nèi)存泄露 memory leak:是指程序在申請(qǐng)內(nèi)存后邻寿,無(wú)法釋放已申請(qǐng)的內(nèi)存空間蝎土,一次內(nèi)存泄露危害可以忽略,但內(nèi)存泄露堆積后果很嚴(yán)重绣否,無(wú)論多少內(nèi)存,遲早會(huì)被占光
? ? ? ? ? ? ? ? ? ? 內(nèi)存泄漏本身不會(huì)產(chǎn)生什么危害瘟则,作為一般的用戶,根本感覺(jué)不到內(nèi)存泄漏的存在枝秤。真正有危害的是內(nèi)存泄漏的堆積醋拧,這會(huì)最終消耗盡系統(tǒng)所有的內(nèi)存。從這個(gè)角度來(lái)說(shuō)淀弹,一次性內(nèi)存泄漏并沒(méi)有什么危害丹壕,因?yàn)樗粫?huì)堆積,而隱式內(nèi)存泄漏危害性則非常大薇溃。導(dǎo)致程序crash菌赖;
二:產(chǎn)生的原因:
定義中已經(jīng)給出,下面說(shuō)一下內(nèi)存溢出產(chǎn)生的地方:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.內(nèi)存中加載的數(shù)據(jù)量過(guò)于龐大沐序,如一次從數(shù)據(jù)庫(kù)取出過(guò)多數(shù)據(jù)琉用;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.集合類中有對(duì)對(duì)象的引用,使用完后未清空策幼,使得JVM不能回收邑时;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.代碼中存在死循環(huán)或循環(huán)產(chǎn)生過(guò)多重復(fù)的對(duì)象實(shí)體;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4.使用的第三方軟件中的BUG特姐;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5.啟動(dòng)參數(shù)內(nèi)存值設(shè)定的過(guò)小
三:解決方案:
不管那種錯(cuò)誤都會(huì)涉及到內(nèi)存定位優(yōu)化我們可以從一下幾部來(lái)避免和解決內(nèi)存泄漏和溢出的問(wèn)題:
1)處理一些IO流的數(shù)據(jù)傳輸時(shí)晶丘,盡量結(jié)束時(shí)候把IO流關(guān)掉
2)處理下載照片時(shí)候,使用BitmapFactory.options唐含。設(shè)置insameplesize()方法壓縮圖片減少資源的占用浅浮;圖片的壓縮問(wèn)題下面會(huì)寫(xiě)一個(gè)專門(mén)專題來(lái)講;
3)還可以通過(guò)降低照片像素的方法捷枯,從而降低占用的內(nèi)存
4)資源的回收:Bitmap.recycle()bitmap=null;
5)盡量使用全局的變量滚秩,少new新的對(duì)象