內存泄漏是指不再被使用的對象或者變量一直被占據在內存中。但是java中有垃圾回收機制,它能夠將不再被使用的對象,自動從內存中清除。
即使這樣,java中也存在着內存泄漏的情況:
一:當長生命周期的對象持有短生命周期的對象的引用,就很可能發生內存泄漏。盡管短生命周期的對象已經不再需要,但是長生命周期的對象一直持有它的引用導致其無法被回收。例如,緩存系統;加載一個對象放在緩存系統中,一直不去使用這個對象,但是它一直被緩存引用,所以不會被回收導致緩存泄漏。
檢查java中的內存泄漏,一定要將程序各個分支情況都完成執行至結束,然后看其是否被使用過,如果沒有才能判定這個對象屬於內存泄漏。
二:當一個對象被存儲進HashSet集合中,就不可修改這個對象中用於計算哈希值的屬性了。否則,對象修改后的哈希值與剛添加進HashSet集合時的哈希值不一樣,此時如果將當前對象的引用作為參數,用contains方法判斷對象是否存在,則會返回找不到對象的結果。這會導致無法從HashSet單獨刪除當前對象,造成內存泄漏
參考地址:http://www.cnblogs.com/guweiwei/p/6641762.html