《调优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的值。


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