古詩詞大全網 - 成語故事 - 內存泄露和內存溢出是指什麽,它們有什麽區別

內存泄露和內存溢出是指什麽,它們有什麽區別

內存泄露和內存溢出的概念,以及它們的區別。具體如下:

1、概念

內存溢出(out of memory):是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;比如申請了壹個integer,但給它存了long才能存下的數,那就是內存溢出。

內存泄露(memory leak):是指程序在申請內存後,無法釋放已申請的內存空間,壹次內存泄露危害可以忽略,但內存泄露堆積後果很嚴重,無論多少內存,遲早會被占光。

2、區別

內存溢出是指程序在申請內存時,沒有足夠的內存空間供其使用, 系統已經不能再分配出妳所需要的空間;內存泄露是指程序在申請內存後,無法釋放已申請的內存空間,壹次內存泄露危害可以忽略,但是內存泄漏次數多了就會導致內存溢出。

內存溢出就是妳要求分配的內存超出了系統能給妳的,系統不能滿足需求,於是產生溢出。

內存泄漏的分類

1、常發性內存泄漏。發生內存泄漏的代碼會被多次執行到,每次被執行的時候都會導致壹塊內存泄漏。

2、偶發性內存泄漏。發生內存泄漏的代碼只有在某些特定環境或操作過程下才會發生。常發性和偶發性是相對的。對於特定的環境,偶發性的也許就變成了常發性的。所以測試環境和測試方法對檢測內存泄漏至關重要。

3、壹次性內存泄漏。發生內存泄漏的代碼只會被執行壹次,或者由於算法上的缺陷,導致總會有壹塊僅且壹塊內存發生泄漏。比如,在類的構造函數中分配內存,在析構函數中卻沒有釋放該內存,所以內存泄漏只會發生壹次。

4、隱式內存泄漏。程序在運行過程中不停的分配內存,但是直到結束的時候才釋放內存。嚴格的說這裏並沒有發生內存泄漏,因為最終程序釋放了所有申請的內存。但是對於壹個服務器程序,需要運行幾天,幾周甚至幾個月,不及時釋放內存也可能導致最終耗盡系統的所有內存。所以,我們稱這類內存泄漏為隱式內存泄漏。