一、長時間存活物件引用了短生命週期物件
// 使用了單例模式
private context context;
this.context = context;
}if (instance != null)
return instance;
}}
這樣不管傳入什麼context最終將使用第一次傳入的context,而單例的生命週期和應用的一樣長;
二、資源未關閉
連線未關閉:資料庫、http
資源檔案未關閉:file.close()
三、靜態物件引用了非靜態物件
static map map = new hashmap();
object o = new object();
map.put("a", o);
四、threadlocal設定了值後未remove掉
java記憶體洩漏
記憶體洩露 memory leak,是指程式在申請記憶體後,無法釋放已申請的記憶體空間,一次記憶體洩露危害可以忽略,但記憶體洩露堆積後果很嚴重,無論多少記憶體,遲早會被占光。memory leak會最終會導致out of memory!以發生的方式來分類,記憶體洩漏可以分為4類 常發性記憶體洩漏。發...
java記憶體洩漏易發場景
記憶體洩露是指無用物件 不再使用的物件 持續占有記憶體 無用物件的記憶體得不到及時釋放 容易發生記憶體洩漏的場景 1.靜態集合類引起記憶體洩露,像hashmap這些靜態變數的生命週期和應用程式一致,他們所引用的所有的物件object也不能被釋放,因為他們也將一直被vector等引用著。2.當集合裡面...
避免Java記憶體洩漏的方法
1 靜態集合類像hashmap vector等的使用最容易出現記憶體洩露,這些靜態變數的生命週期和應用程式一致,所有的物件object也不能被釋放,因為他們也將一直被vector等應用著。2 大量臨時變數的使用,沒有及時將物件設定為null也可能導致記憶體的洩露 3 資料庫的連線沒有關閉情況,包括連...