java 記憶體溢位與記憶體洩露

2021-09-10 04:37:18 字數 780 閱讀 7140

記憶體溢位 out of memory

是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory;比如申請了乙個integer,但給它存了long才能存下的數,那就是記憶體溢位。

記憶體洩露 memory leak

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

記憶體洩漏可以分為四類:

1、常發性記憶體洩漏,發生記憶體洩漏的**會被多次執行到,每次執行都會導致記憶體洩漏

2、偶發性記憶體洩漏:發生記憶體洩漏的**只有在某些特定環境或操作過程下才會發生,

3、一次性記憶體洩漏,發生記憶體洩漏的**只會被執行一-次,或者由於演算法上的缺陷,導致總會有一塊僅且一塊記憶體發生洩漏。

4、隱式記憶體洩漏。程式在執行過程中不停的分配記憶體,但是直到結束的時候才釋放記憶體。

從使用者使用程式的角度來看,記憶體洩漏本身不會產生什麼危害,真正有危害的是記憶體洩漏的堆積,這會最終消耗盡系統所有的記憶體。

記憶體溢位常見原因:

1.記憶體中載入的資料量過於龐大,如一次從資料庫取出過多資料;

2.集合類中有對物件的引用,使用完後未清空,使得jvm不能**;

3.**中存在死迴圈或迴圈產生過多重複的物件實體;

4.使用的第三方軟體中的bug;

5.啟動引數記憶體值設定的過小

解決方案:

1、修改jvm引數,直接增加記憶體

2、檢查錯誤日誌,檢視記憶體溢位錯誤前是否有其他異常錯誤

3、對**進行走查分析,找出可能發生記憶體溢位的位置

記憶體溢位與記憶體洩露

2019獨角獸企業重金招聘python工程師標準 兩者的區別 記憶體溢位 out of memory 指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory 比如申請了乙個integer,但給它存了long才能存下的數,那就是記憶體溢位。記憶體洩露 memory leak...

記憶體溢位,與記憶體洩露

記憶體洩漏 memory leak 是指程式在申請記憶體後,無法釋放已申請的記憶體空間 只出不進漏氣一樣 記憶體溢位 就是你要的記憶體空間超過了系統實際分配的空間,此時系統相當於沒法滿足你的需求,就會報記憶體溢位的錯誤 比方說棧,棧滿時再做進棧必定產生空間溢位,叫上溢,棧空時再做退棧也產生空間溢位,...

記憶體洩露和記憶體溢位

一 記憶體洩露 1.定義 指由於疏忽或錯誤造成程式未能釋放已經不再使用的記憶體的情況。記憶體洩漏並非指內存在物理上的消失,而是應用程式分配某段記憶體後,由於設計錯誤,失去了對該段記憶體的控制,因而造成了記憶體的浪費。2.洩露型別 1 堆記憶體洩漏 heap leak a.指利用malloc或new進...