Java內存泄漏與內存溢出

Java內存泄漏原因:

1.靜態集合類,例如HashMap和Vector。這些靜態變量的生命週期和應用程序一致,他們所引用的所有的對象Object也不能被釋放,因爲他們也將一直被Vector等引用着。

2.各種連接,如數據庫連接、網絡連接及IO連接,使用過後未顯式關閉,造成大量對象無法被回收。

3.監聽器。在釋放對象的時候卻沒有刪除監聽器,從而增加了內存泄漏的機會。

4.變量不合理的作用域。

5.單例模式。不正確使用單例模式,單例對象在被初始化後將在JVM的整個生命週期中存在(以靜態變量的方式),如果單例對象持有外部對象的引用,那麼這個外部對象將不能被jvm正常回收,導致內存泄露,


Java內存溢出原因:


引起內存溢出的原因有很多種,常見的有以下幾種:
1.內存中加載的數據量過於龐大,如一次從數據庫取出過多數據;
2.集合類中有對對象的引用,使用完後未清空,使得JVM不能回收;
3.代碼中存在死循環或循環產生過多重複的對象實體;
4.使用的第三方軟件中的BUG;
5.啓動參數內存值設定的過小
內存溢出的解決方案:
第一步,修改JVM啓動參數,直接增加內存。(-Xms,-Xmx參數一定不要忘記加。)
第二步,檢查錯誤日誌,查看“OutOfMemory”錯誤前是否有其它異常或錯誤。
第三步,對代碼進行走查和分析,找出可能發生內存溢出的位置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章