Java内存设置详解(含内存溢出问题的解决)

  

<强>一、常见的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  

Java内存设置详解(含内存溢出问题的解决)