这是一个经常遇到的异常,本文整理介绍相关知识点,分析发生此异常的可能原因,并结合项目中曾遇到过的实际案例进行分析。
先解释几个概念
java.lang.OutOfMemoryError
因为内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时抛出该异常。
PermGen space
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。
发生异常的可能原因
由上文可见,出现PermGen space错误的原因就是class加载得太多从而内存溢出,具体造成这一错误的原因有两个方面:
1、分配给JVM的最大内存值(MaxPermSize)太小了
2、应用本身加载的class或jar太多了
分配给JVM的最大内存值太小
先看看几个常用的参数:
-Xms128m JVM初始分配的堆内存
-Xmx512m JVM最大允许分配的堆内存,按需分配
-XX:PermSize=64M JVM初始分配的非堆内存
-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配
如果是Windows系统下,修改