《調優JVM內存解決OutOfMemoryError 》

《調優JVM內存解決OutOfMemoryError 》

從VM規範中我們可以得到,一下幾種異常。
     java.lang.StackOverflowError:(很少)
     java.lang.OutOfMemoryError:heap space(比較常見)
     java.lang.OutOfMemoryError: PermGen space (經常出現)

   以下分別解釋一下,從最常見的開始:

  • java.lang.OutOfMemoryError

PermGen space 這個異常比較常見,是說JVM裏的Perm內存區的異常溢出,由於JVM在默認的情況下,Perm默認爲64M,而很多程序需要大量的Perm區內存,尤其使用到像Spring等框架的時候,由於需要使用到動態生成類,而這些類不能被GC自動釋放,所以導致OutOfMemoryError: PermGen space異常。解決方法很簡單,增大JVM的 -XX:MaxPermSize 啓動參數,就可以解決這個問題。

  • java.lang.OutOfMemoryError

heap space或 其它OutOfMemoryError,這個異常實際上跟上面的異常是一個異常,但解決方法不同,所以分開來寫。上面那個異常是因爲JVM的perm區內存區分少了引起的(JVM的內存區分爲 young,old,perm三種)。而這個異常是因爲JVM堆內存或者說總體分少了。解決方法是更改 -Xms -Xmx 啓動參數,通常是擴大1倍。xms是管理啓動時最小內存量的,xmx是管裏JVM最大的內存量的。

  • java.lang.StackOverflowError

老實說這個異常我也沒碰見過,但JVM Specification就提一下,規範上說有一下幾種境況可能拋出這個異常,一個是Stacks裏的線程超過允許的時候,另一個是當native method要求更大的內存,而超過native method允許的內存的時候。根據SUN的文檔,提高-XX:ThreadStackSize=512的值。


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