1. 程式人生 > 其它 >記憶體溢位和記憶體洩漏

記憶體溢位和記憶體洩漏

記憶體溢位:

當建立物件的大小大於可用記憶體容量的大小的時候會發生記憶體溢位。

假設JVM可用記憶體空間只剩下3M,但是我們要建立一個5M的物件,那麼新建的物件就會放不進去,這個時候我們就叫記憶體溢位

就像300mL的水杯匯入500mL的水,這時候水就會溢位

記憶體洩漏:

假設業務程式碼執行空間中建立了兩個1M的物件,一起會佔用2M的記憶體,當我們物件使用完後,這兩個物件並沒有釋放,因此記憶體中就會留下2M的記憶體空間,一直被佔用,

而我們的業務程式碼會被反覆執行,每次執行都會留下2M空間不被釋放,

反覆執行多次之後,隨著時間的累積就會有大量的物件用完不被釋放,導致這些物件不能得到回收而且會發生記憶體溢位這種情況我們就叫記憶體洩漏

也就是說我們業務程式碼執行過程中,有些物件因該被回收,但是又有其他物件引用了它,GC就不能自動回收,所以該回收的垃圾物件並沒有被回收,垃圾就會越來越多,可用的記憶體空間就會越來越少

如果可用記憶體無法存放新的垃圾物件的時候就會導致記憶體洩露,所以記憶體洩漏又會導致記憶體溢位

如何避免:我們在Code過程中,特別是一些流物件,比如說:OutputStream,Reader,BitMap,Document很容易就忘了Close,最麻煩的是還要按順序回收,順序錯了還會產生空指標

所以在Code過程中一定要注意,當然現在有很多IDE會有智慧提示,也避免了很多低階錯誤。