<强>一、常见的Java内存溢出有以下三种:强>
<强> 1. . lang。OutOfMemoryError: Java堆空间——JVM堆(堆)溢出
强>
JVM在启动的时候会自动设置JVM堆的值,其初始空间(即xms)是物理内存的1/64,最大空间(- xmx)不可超过物理内存。
可以利用JVM提供的厦门xms - xmx等选项可进行设置.Heap的大小是年轻一代和终身我厂之和。
在JVM中如果98%的时间是用于GC,且可用的堆大小不足2%的时候将抛出此异常信息。
解决方法:手动设置JVM堆(堆)的大小。
<强> 2. . lang。OutOfMemoryError: PermGen空间——PermGen空间溢出
强>
PermGen空间的全称是永久代空间,是指内存的永久保存区域。
为什么会内存溢出,这是由于这块内存主要是被JVM存放类和元信息的,在类被加载的时候被放入PermGen空间区域,它和存放实例的堆区域不同,太阳的GC不会在主程序运行期对PermGen空间进行清理,所以如果你的应用程序会载入很多类的话,就很可能出现PermGen空间溢出。
解决方法:手动设置MaxPermSize大小
<强> 3. . lang。StackOverflowError——栈溢出
强>
栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和帕斯卡都是一样的。函数的调用过程都体现在堆栈和退栈上了。
调用构造函数的“层”太多了,以致于把栈区溢出了。
通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要1 k的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1 mb的空间,通常栈的大小是1-2MB的。通常递归也不要递归的层次过多,很容易溢出。
解决方法:修改程序。
<强>二、方法具体步骤强>
<强> 1. linux下的tomcat: 强>
修改TOMCAT_HOME/bin/卡特琳娜。sh位置cygwin=false前。
<代码> JAVA_OPTS=" - server -Xms256m -Xmx512m - xx: PermSize=64 - xx: MaxPermSize=128 " 代码>
<强> 2。如果tomcat 5注册成了windows服务,以服务方式启动的,则需要修改注册表中的相应键值。
强>
修改注册表HKEY_LOCAL_MACHINE \软件\ Apache SOFTWARE Foundation \ tomcat服务经理\ Java \ Tomcat5 \参数,右侧的选择
原值为:
<代码> -Dcatalina。家=" C: \ ApacheGroup \ Tomcat 5.0” -Djava.endorsed。dirs=" C: \ ApacheGroup \ Tomcat 5.0 \常见\支持” xrs 代码>
加入
<代码> -Xms256m -Xmx512m 代码>
重起tomcat服务,设置生效
* * 3。如果tomcat 6注册成了windows服务,或者windows2003下用tomcat的安装版,在/bin/tomcat6w。exe里修改就可以了。
<>强4。如果要在myeclipse中启动tomcat,上述的修改就不起作用了,可如下设置:
强>
myeclipse→选项→myeclipse→→服务器tomcat→tomcat××。→JDK面板中的
可选的Java VM参数中添加:
<代码> -Xms256m -Xmx512m - xx: PermSize=64 - xx: MaxPermSize=128 代码>