java 會不會發生記憶體洩漏

2021-07-28 23:48:37 字數 453 閱讀 2871

記憶體洩漏是指無用的物件或者用不到的物件長期占用記憶體得不到釋放。

記憶體洩漏的根本原因是長生命週期的物件持有短生命週期的物件。

1、靜態集合類最容易發生記憶體洩漏

比如hashmap、vector等,這些靜態集合類與應用程式的生命週期相一致。

例如:

for(int i = 0;i<100;i++)
雖然o被賦值為null,但是該物件例項一直被list所引用,不會被釋放。

因此,當物件不再使用的時候,不僅應該將引用例項置為null,而且應該將其從靜態集合類中刪除。

2、當集合類裡面的物件屬性被修改以後,呼叫remove方法起不到預料的作用

3、各種連線需要被手動呼叫close方法被釋放,如資料庫連線、網路連線。

4、不正確的單例模式,一般單例物件是長生命期的物件,與應用程式的生命的週期相同,如果在單例中持有了大的外部類物件。

java記憶體洩漏

記憶體洩露 memory leak,是指程式在申請記憶體後,無法釋放已申請的記憶體空間,一次記憶體洩露危害可以忽略,但記憶體洩露堆積後果很嚴重,無論多少記憶體,遲早會被占光。memory leak會最終會導致out of memory!以發生的方式來分類,記憶體洩漏可以分為4類 常發性記憶體洩漏。發...

java記憶體洩漏

一 長時間存活物件引用了短生命週期物件 使用了單例模式 private context context this.context context if instance null return instance 這樣不管傳入什麼context最終將使用第一次傳入的context,而單例的生命週期和應...

記憶體耗盡後,Redis會發生什麼?

作為一台伺服器來說,記憶體並不是無限的,所以總會存在記憶體耗盡的情況,那麼當 redis 伺服器的記憶體耗盡後,如果繼續執行請求命令,redis 會如何處理呢?ps 不管使用哪乙個命令,最終 redis 底層都是使用 pexpireat 命令來實現的。另外,set 等命令也可以設定 key 的同時加...