記憶體洩漏和溢位

2021-07-24 11:19:16 字數 1155 閱讀 1367

記憶體洩漏:memory leak,是指程式在申請記憶體後,無法釋放已申請的記憶體空間,一次記憶體洩漏危害可以忽略,但記憶體洩漏堆積後果很嚴重,無論多少記憶體,遲早會被占光。

記憶體溢位:out of memory,是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory,比如申請了乙個integer,但給它存了long才能存下的數,那就是記憶體溢位。除此之外,也有一次性申請很多記憶體,比如說一次建立大的陣列或者是載入乙個大檔案如。很多時候是的處理不當。

memory leak 會最終導致out of memory!

記憶體洩漏舉例

1,android資料庫查詢時會使用cursor,但是在寫**時,經常會有人忘記呼叫close,或者因為**邏輯問題導致close未被呼叫。

2,i/o資料流操作,讀寫結束後沒有關閉。

3,bitmap使用後未呼叫recycle();

4,呼叫registerreceiver後未呼叫unregisterreceiver().

5,還有種比較隱晦的context洩漏

先讓我門看一下以下**:

private static drawable sbackground;

@override protected void oncreate(bundle state)

label.setbackgrounddrawable(sbackground); setcontentview(label); }

**說明:在這段**中,我們使用乙個static的drawable物件。這通常發生在我們需要經常呼叫乙個drawable,而其載入又比較耗時,不希望每次載入activity都去建立這個drawable的情況。此時,使用static無疑是最快的**編寫方式,但是其也非常的糟糕。當乙個drawable被附加到view時,這個view會被設定為這個drawable的callback (通過呼叫drawable.setcallback()實現)。這就意味著,這個drawable擁有乙個textview的引用,而textview又擁有乙個activity的引用。這就會導致activity在銷毀後,記憶體不會被釋放。

記憶體溢位舉例

1,一次性載入乙個大檔案如,載入大的解決方案[android隨筆]如何有效載入顯示

2,使用list view、gridview在乙個螢幕上顯示多張

記憶體洩漏和記憶體溢位 記憶體洩漏和記憶體溢位

記憶體洩漏 是指申請的記憶體空間使用完畢之後未 一次記憶體洩露危害可以忽略,但若一直洩漏,無論有多少記憶體,遲早都會被占用光,最終導致程式crash。因此,開發中我們要盡量避免記憶體洩漏的出現 記憶體溢位 是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用。通俗理解就是記憶體不夠用了,通常在執行大...

記憶體溢位和記憶體洩漏

記憶體溢位 oom 指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現oom 記憶體洩露memory leak 指程式在申請記憶體後,無法釋放已申請的記憶體空間,一直占用著這塊記憶體空間。記憶體溢位就是你要求分配的記憶體超出了系統能給你的,系統不能滿足需求,於是產生溢位。記憶體洩漏是指你向系統...

記憶體溢位和記憶體洩漏

記憶體溢位 out of memory,是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory 比如申請了乙個integer,但給它存了long才能存下的數,那就是記憶體溢位。記憶體洩露 memory leak,是指程式在申請記憶體後,無法釋放已申請的記憶體空間,一次記...