Java常見的幾種內存溢出

一.java.lang.OutOfMemoryError:Java heap space:
解決方法:

    1.檢查程序,看是否有死循環或不必要地重複創建大量對象
    2.修改這兩個參數來增加堆內存 -Xms3062m  設置堆初始內存 -Xmx3062m  設置堆最大內存

二.java.lang.OutOfMemoryError: PermGen space:

    這種是方法區內存不夠,可通過調整JVM的配置:
  -XX:MaxPermSize=128m
  -XX:PermSize=128m

三.java.lang.StackOverflowError
  

      這也內存溢出錯誤的一種,即線程棧的溢出,要麼是方法調用層次過多(比如存在無限遞歸調用),要麼是線程棧太小。
      優化程序設計,減少方法調用層次;調整-Xss參數增加線程棧大小。

四.java.lang.OutOfMemoryError: Directbuffermemory
 

   調整-XX:MaxDirectMemorySize=參數,如添加JVM配置:
  -XX:MaxDirectMemorySize=128m  如果不指定,則默認與Java堆最大值(-Xmx)相同

五.java.lang.OutOfMemoryError:unable to create new native thread  

    本地方法棧空間不足以創建額外的線程,要麼是創建的線程過多,要麼是本地方法棧空間確實小了。
    1.通過-Xss啓動參數減少單個線程棧大小,這樣便能開更多線程(當然不能太小,太小會出現StackOverflowError);
    2.通過-Xms-Xmx兩參數減少Heap大小,將內存讓給Stack(前提是保證Heap空間夠用)。

注:本文彙總互聯網多篇文章與本人相關實踐經驗

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