java 關於內存泄漏和內存溢出

內存溢出和內存泄漏的區別

1. 內存溢出:out of memory ,是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;好比申請了一個integer,但給它存了long才能存下的數,那就是內存溢出。

例如:
1.內存中加載的數據量過於龐大,如一次從數據庫取出過多數據;
2.集合類中有對對象的引用,使用完後未清空,使得JVM不能回收;
3.代碼中存在死循環或循環產生過多重複的對象實體;
4.使用的第三方軟件中的BUG;
5.啓動參數內存值設定的太小數據庫

2. 內存泄漏:memory leak,是指程序在申請內存後,沒法釋放已申請的內存空間,一次內存泄露危害能夠忽略,但內存泄露堆積後果很嚴重,不管多少內存,早晚會被佔光。

例如:網絡

  1. 靜態集合類:集合容器中的對象在程序結束前得不到釋放,會形成內存堆積;
Vector v=new Vector(10);
  for(int i=0;i<10;i++){
    Object o=new Object();
     v.add(o);
   }
  1. 各類鏈接:數據庫鏈接,網絡鏈接,以及io鏈接,鏈接後得不到關閉,
  2. 監聽器:在使用多個監聽器後,釋放了對象,而沒有刪除監聽器,也可能致使內存溢出;
  3. 變量不合理的做用域:若是一個變量的定義的做用範圍大於其使用範圍,還有,沒有及時把對象設置爲null,可能這是咱們比較常常出現的問題,因此有一些變量咱們能夠設置爲方法做用範圍內,當方法使用完,就釋放了。
相關文章
相關標籤/搜索