Java內(nèi)存泄漏


內(nèi)存泄漏是指也給不在被程序使用的對象或變量還在內(nèi)存中占有存儲空間。主要有兩種情況:

  • 在堆中申請的空間沒有被釋放;
  • 是對象已不再被使用,但還仍然在內(nèi)存中保留著。

容易引起內(nèi)存泄漏的原因主要有以下幾個方面:

  • 靜態(tài)集合類,例如HashMap和Vector。如果這些容器為靜態(tài),由于它們的生命周期與程序一致,那么容器中的對象在程序結束之前將不能被釋放,從而造成內(nèi)存泄漏。
  • 各種連接,例如數(shù)據(jù)庫連接、網(wǎng)絡連接以及IO連接等。在對數(shù)據(jù)庫進行操作的過程中,首先需要建立與數(shù)據(jù)庫的連接,當不再使用時,需要調(diào)用close()方法來釋放與數(shù)據(jù)庫的連接。只有連接關閉后,垃圾回收器才會回收對應的對象。否則,如果在訪問數(shù)據(jù)庫的過程中,對Connection、Statement或ResultSet不顯示地關閉,將會造成大量的對象無法被回收,引起內(nèi)存泄漏。
  • 監(jiān)聽器。在Java中,通常也給應用中會用到多個監(jiān)聽器,但是在釋放對象的同時往往沒有相應地刪除監(jiān)聽器,這也可能導致內(nèi)存泄漏。
  • 變量不合理的作用域。如果一個變量定義的作用范圍大于它的使用范圍,很可能會造成內(nèi)存泄漏,另一方面如果沒有及時地把對象設置null,很可能導致內(nèi)存泄漏。
  • 單例模式可能造成內(nèi)存泄漏。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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