1 回答

TA貢獻2021條經(jīng)驗 獲得超8個贊
內(nèi)存溢出 out of memory,是指程序在申請內(nèi)存時,沒有足夠的內(nèi)存空間供其使用,出現(xiàn)out of memory;比如申請了一個integer,但給它存了long才能存下的數(shù),那就是內(nèi)存溢出。內(nèi)存泄露 memory leak,是指程序在申請內(nèi)存后,無法釋放已申請的內(nèi)存空間,一次內(nèi)存泄露危害可以忽略,但內(nèi)存泄露堆積后果很嚴重,無論多少內(nèi)存,遲早會被占光。memory leak會最終會導(dǎo)致out of memory!
產(chǎn)生的原因:
1.內(nèi)存中加載的數(shù)據(jù)量過于龐大,如一次從數(shù)據(jù)庫取出過多數(shù)據(jù);
2.集合類中有對對象的引用,使用完后未清空,使得JVM不能回收;
3.代碼中存在死循環(huán)或循環(huán)產(chǎn)生過多重復(fù)的對象實體;
4.使用的第三方軟件中的BUG;
5.啟動參數(shù)內(nèi)存值設(shè)定的過小
解決方案:
1)處理一些IO流的數(shù)據(jù)傳輸時,盡量結(jié)束時候把IO流關(guān)掉
2)處理下載照片時候,使用BitmapFactory.options。設(shè)置insameplesize()方法壓縮圖片減少資源的占用;圖片的壓縮問題下面會寫一個專門專題來講;
3)還可以通過降低照片像素的方法,從而降低占用的內(nèi)存
4)資源的回收:Bitmap.recycle()bitmap=null;
5)盡量使用全局的變量,少new新的對象
內(nèi)存泄漏本身不會產(chǎn)生什么危害,作為一般的用戶,根本感覺不到內(nèi)存泄漏的存在。真正有危害的是內(nèi)存泄漏的堆積,這會最終消耗盡系統(tǒng)所有的內(nèi)存。從這個角度來說,一次性內(nèi)存泄漏并沒有什么危害,因為它不會堆積,而隱式內(nèi)存泄漏危害性則非常大。導(dǎo)致程序crash;
- 1 回答
- 0 關(guān)注
- 809 瀏覽
添加回答
舉報