直接上图:
JBoss,找到%bin%/run.bat,用记事本打开,找到以下位置,并添加后面那段(即加大堆内存的方法):
Tomcat,
在%Tomcat%/bin目录下,新建如:run1.bat文件,内容如下:
set java_home=C:/j2sdk1.4.2_08
startup.bat -Xms512m -Xmx1024m -XX:MaxPermSize=256m -XX:PermSize=256M
即增加了启动的参数,加大启动内存。
在eclipse上的操作,如图:
对于这4个参数的解释如下:
-Xms128m -Xmx512m -XX:MaxPermSize=64m -XX:PermSize=128M
这四个参数其实都是JVM参数,
-Xms128m JVM初始分配的堆内存-Xmx512m JVM最大允许分配的堆内存,按需分配-XX:PermSize=64M JVM初始分配的非堆内存-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配
(
关于java内存机制,可参考我的另外一篇博客
)
Xms和Xmx针对的是堆内存,是java代码可及的内存,是给开发人员使用的内存,比如,你把数据库的海量数据都load到内存里超过分配的堆内存,就会暴内存溢出,这个内存溢出就是OutOfMemory,堆溢出。
-Xms128m JVM初始分配的堆内存。如果-Xmx不指定或者指定偏小,应用可能会导致java.lang.OutOfMemory错误,此错误来自JVM,不是Throwable的,无法用try...catch捕捉。
-Xmx512m JVM最大允许分配的堆内存。
-XX:PermSize=64M JVM初始分配的非堆内存,是JVM自己的,不是给开发人员用的,主要是用来存放Class和Meta的信息,Class文件在被Load的时候被放入PermGen space区域,它和存放Instance的Heap堆区域不同。比如,这个往往发生在服务器(tomcat等)加载项目时,项目太大又没设置非堆内存的话,启动就会暴这个错,因为大量class文件load到非堆内存,超过了非堆内存限制,就会暴PermGen
space错误,往往通过设置-XX:PermSize=64M -XX:MaxPermSize=128M解决,增大非堆内存。
-XX:MaxPermSize设置过小会导致java.lang.OutOfMemoryError: PermGen space就是内存益出。
这两种抛的异常是不一样的,堆内存益处是java.lang.OutOfMemory,非堆内存溢出会报java.lang.OutOfMemoryError: PermGen space。
对于tomcat安装版,很多人在\bin\catalina.bat文件的内容,即在里面增加一行代码:set JAVA_OPTS=-Xms512m -Xmx512m
但发现不起作用.即通过windows的服务启动tomcat时,实际的内存还是默认的,修改的设置并没有起作用;而通过\bin\startup.bat启动却是生效的。这是为什么呢?因为在安装过程中,JVM的初始化参数已经写在注册表中了,由于没有修改注册表中相关参数,所以以windows服务方式启动时,修改的并没有生效。而通过\bin\startup.bat启动直接是通过\bin\catalina.bat文件中的配置的。你需要重新加载到系统服务中才生效,或者你手工在注册表中查找修改启动值,加载到服务中的时候参数已经配置好了,自己修改sartup.bat不会改变注册表中的参数设置。
解决方法:修改注册表中的参数,加入JVM初始化内存的参数:HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions值为-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs如加入-Xms512m -Xmx800m