https://www.cnblogs.com/tiancai/p/9634332.html
內存泄漏:
概念:由于java的JVM引入了垃圾回收機制刊棕,垃圾回收器會自動回收不再使用的對象钢猛;JVM是使用引用計數(shù)法和可達性分析算法來判斷對象是否是不再使用的對象,本質都是判斷一個對象是否還被引用衍慎。那么對于這種情況下转唉,由于代碼的實現(xiàn)不同就會出現(xiàn)很多種內存泄漏問題(讓JVM誤以為此對象還在引用中,無法回收稳捆,造成內存泄漏)赠法。
造成內存泄漏的方式:
1:靜態(tài)集合類
2:各種連接沒有關閉:數(shù)據(jù)庫,io
3:變量不合理的作用域:變量定義的范圍大于其使用的范圍乔夯,如果沒有及時把變量置為null砖织,就容易內存泄露
4、內部類持有外部類末荐,如果一個外部類的實例對象的方法返回了一個內部類的實例對象侧纯,這個內部類對象被長期引用了,即使那個外部類實例對象不再被使用甲脏,但由于內部類持有外部類的實例對象眶熬,這個外部類對象將不會被垃圾回收,這也會造成內存泄露块请。娜氏??墩新?贸弥??海渊?绵疲?哲鸳??最岗?帕胆??般渡?懒豹??驯用?脸秽??蝴乔?记餐??薇正?片酝??挖腰?雕沿??猴仑?审轮??辽俗?疾渣??崖飘?榴捡??朱浴?吊圾??赊琳?街夭?砰碴?躏筏??呈枉?趁尼?埃碱??酥泞?砚殿??芝囤?似炎??悯姊?羡藐??悯许?仆嗦??先壕?瘩扼??垃僚?集绰??冈在?倒慧??包券?纫谅??溅固?付秕??侍郭?询吴??亮元?猛计??爆捞?奉瘤???盗温?藕赞??卖局?斧蜕??
5砚偶、改變哈希值批销,當一個對象被存儲進HashSet集合中以后,就不能修改這個對象中的那些參與計算哈希值的字段了染坯,否則风钻,對象修改后的哈希值與最初存儲進HashSet集合中時的哈希值就不同了,在這種情況下酒请,即使在contains方法使用該對象的當前引用作為的參數(shù)去HashSet集合中檢索對象骡技,也將返回找不到對象的結果,這也會導致無法從HashSet集合中單獨刪除當前對象羞反,造成內存泄露