講講什么情況下回出現(xiàn)內(nèi)存溢出,內(nèi)存泄漏?

https://www.cnblogs.com/tiancai/p/9634332.html

內(nèi)存泄漏:

概念:由于java的JVM引入了垃圾回收機(jī)制,垃圾回收器會自動回收不再使用的對象;JVM是使用引用計數(shù)法和可達(dá)性分析算法來判斷對象是否是不再使用的對象,本質(zhì)都是判斷一個對象是否還被引用。那么對于這種情況下,由于代碼的實現(xiàn)不同就會出現(xiàn)很多種內(nèi)存泄漏問題(讓JVM誤以為此對象還在引用中,無法回收,造成內(nèi)存泄漏)。


造成內(nèi)存泄漏的方式:

1:靜態(tài)集合類

2:各種連接沒有關(guān)閉:數(shù)據(jù)庫,io

3:變量不合理的作用域:變量定義的范圍大于其使用的范圍,如果沒有及時把變量置為null,就容易內(nèi)存泄露

4、內(nèi)部類持有外部類,如果一個外部類的實例對象的方法返回了一個內(nèi)部類的實例對象,這個內(nèi)部類對象被長期引用了,即使那個外部類實例對象不再被使用,但由于內(nèi)部類持有外部類的實例對象,這個外部類對象將不會被垃圾回收,這也會造成內(nèi)存泄露。???????????????????????????????????????????????????????????????????????????????????????????

5、改變哈希值,當(dāng)一個對象被存儲進(jìn)HashSet集合中以后,就不能修改這個對象中的那些參與計算哈希值的字段了,否則,對象修改后的哈希值與最初存儲進(jìn)HashSet集合中時的哈希值就不同了,在這種情況下,即使在contains方法使用該對象的當(dāng)前引用作為的參數(shù)去HashSet集合中檢索對象,也將返回找不到對象的結(jié)果,這也會導(dǎo)致無法從HashSet集合中單獨(dú)刪除當(dāng)前對象,造成內(nèi)存泄露

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容