jvm內(nèi)存泄漏原因及處理

關于這題也答得很爛,雖然之前已經(jīng)看過了,但是可能是死記硬背的原因,答得太模糊了。
Java中的內(nèi)存泄露,廣義并通俗的說,就是:不再會被使用的對象的內(nèi)存不能被回收,就是內(nèi)存泄露。

如果長生命周期的對象持有短生命周期的引用,就很可能會出現(xiàn)內(nèi)存泄露。

public class Simple   {
       Object object;
       void method () {
              object = new Object();
        }
}

就像上面的代碼,嚴格意義上就是一種內(nèi)存泄漏,因為object不再被使用了,但它不會被立即回收,而是得等到Simple對象被釋放的時候。
可以這樣寫

public class Simple   {
       Object object;
       void method () {
              Object object = new Object();
              //使用Object
              object = null;
        }
}

把Object定義為局部變量,并在最后賦值為null

因此,解決內(nèi)存泄漏的一個方法,就是盡量降低變量的作用域,以及及時把對象復制為可清理對象(null)

如ArrayList的pop()方法

public E pop(){
    if(size == 0)
        return null;
    else{
          E e = (E) elementData[--size];
          elementData[size] = null;
          return e;
  }
}

容器使用時的內(nèi)存泄漏

      Vector vector = new Vector();
      for (int i = 1; i<100; i++)
    {
          Object object = new Object();
          vector.add(object);
          object = null;
      }
      //...對vector的操作
      //...與vector無關的其他操作
}

這里其實只是會造成短暫的內(nèi)存泄漏,在method方法結束后還是會把回收的,更好的寫法是:

      Vector vector = new Vector();
      for (int i = 1; i<100; i++)
    {
          Object object = new Object();
          vector.add(object);
          object = null;
      }
      //...對vector的操作
      vector = null;
      //...與vector無關的其他操作
}

close()方法導致的內(nèi)存泄漏

在各種IO或者數(shù)據(jù)庫連接時,都需要在最后通過close()方法釋放對象,這里也是長對象引用短對象是造成的內(nèi)存泄漏

SessionFactory factory = new SessionFactory();
try {Session session = factory.connect();
} finally{
      session.close();
}

這里必須用close關閉連接,因為SessionFactory是長對象,session是短對象。

參考文章:https://blog.csdn.net/anxpp/article/details/51325838

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

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

  • Android 內(nèi)存泄漏總結 內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應用出現(xiàn)內(nèi)存泄漏的問題。內(nèi)存泄漏...
    _痞子閱讀 1,703評論 0 8
  • Android 內(nèi)存泄漏總結 內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應用出現(xiàn)內(nèi)存泄漏的問題。內(nèi)存泄漏...
    apkcore閱讀 1,310評論 2 7
  • 內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應用出現(xiàn)內(nèi)存泄漏的問題。內(nèi)存泄漏大家都不陌生了,簡單粗俗的講,...
    DreamFish閱讀 875評論 0 5
  • Android 內(nèi)存泄漏總結 內(nèi)存管理的目的就是讓我們在開發(fā)中怎么有效的避免我們的應用出現(xiàn)內(nèi)存泄漏的問題。內(nèi)存泄漏...
    神奇的小蘑菇閱讀 576評論 0 0
  • 內(nèi)存泄漏 內(nèi)存管理 內(nèi)存模型 Android原生開發(fā)以java為主。 在java中,Java內(nèi)存模型,往往是指J...
    迷失的胖子閱讀 550評論 0 0

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