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

2021-09-24 20:10:02 字數 750 閱讀 8503

相同與不同

如何避免記憶體洩漏

我們用棧來模擬,首先我們定義乙個我們自己的棧,**如下圖所示:

package com.zhuguang.allen;

public class stack

//入棧

public void push(object e)

//出棧

public object pop()

}

假如沒有在出棧的時候沒有將棧的元素置空,也就是沒有elements[size]=null,這一行**。那我們來執行下面的測試**:

package com.zhuguang.allen;

public class usestack

}

我們會發現最後的這一行也會列印出物件,我們看到明明入棧和出棧了乙個元素,為什麼列印棧內的第乙個元素還能拿到物件呢?其實這裡就出現了記憶體洩漏。如果要防止洩露我們要在出棧的時候加上elements[size] = null。

記憶體洩漏一般出現在通過某種容器自己去儲存元素的時候特別容易發生記憶體洩漏。我們來看下jdk的原始碼,看下arraylist的**,看到remove方法this.elementdata[--this.size] = null;這行**其實就是讓元素置空,然後讓gc進行**。為了防止記憶體洩漏。所以如果大家來寫**的時候,特別是用陣列來儲存元素的時候,大家要特別注意。

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

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

記憶體溢位和記憶體洩漏

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

記憶體溢位和記憶體洩漏

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