欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

解决Java中OutOfMemoryError的问题

程序员文章站 2024-03-06 20:12:20
目前为止,我遇到使用tomcat有三种情况:第一,使用eclipse,在eclipse中配置tomcat。第二,直接在tomcat中部署项目。第三将tomcat安装为win...

目前为止,我遇到使用tomcat有三种情况:第一,使用eclipse,在eclipse中配置tomcat。第二,直接在tomcat中部署项目。第三将tomcat安装为windows服务。
在这三种情况下,出现outofmemoryerror.该怎么解决呢?这里我不得不提我被网上那些不负责任的文章害得很惨。各种设置内存的方法都试了,可就是不起作用。下面我说的这几种方法都是我亲自试验过的,没有问题。

第一种情况:
 如图:我用红色框框出来的。其中xms和xmx是增加java虚拟机初始堆大小和最大堆大小参数,主要是解决由于java heap space不足造成的原因。xx:permsize和xx:maxpermsize是增加初始永久保存区域大小和最大永久保存区域大小的参数,主要解决程序中使用了大量的jar或class,java虚拟机装载类的空间不够,与permanent generation space有关。

解决Java中OutOfMemoryError的问题

第二种情况:
直接把编译好的项目放在tomcat中,采用startup.bat启动tomcat服务。如下在tomca的bin文件夹下:

解决Java中OutOfMemoryError的问题

这种情况下,我们要修改catalina.bat里面的参数。打开它。找到这两句:
  rem guess catalina_home if not defined
  set "current_dir=%cd%"
 在这两句之上加上这句,一定要之上:set "java_opts=-xms512m -xmx1024m -xx:permsize=256m -xx:maxpermsize=512m"
 网上很多类似的,但是试过好多都不行,一定要注意:它的位置,和引号等细节。

第三种情况:
如果你的tomcat是注册为windows服务并且是以服务方式启动的,那么上面的方法就无效了,因为这时tomcat启动是读取注册表的参数,而不是读取批处理文件的参数,这时我们来这样设置jvm参数。:在tomcat的bin目录下找到tomcat7w.exe,打开:

解决Java中OutOfMemoryError的问题

  在java选项下:下方的initial memory pool就是初始化堆内存大小,maximun memory pool是最大堆内存大小。而要设置perm gen池的大小就要在java option里面加参数了,在里面加上:
-dcatalina.base=%tomcat_home%
-dcatalina.home=%tomcat_home%
-djava.endorsed.dirs=%tomcat_home%\endorsed
-djava.io.tmpdir=%tomcat_home%\temp
-xx:permsize=256m
-xx:maxpermsize=256m
-xx:reservedcodecachesize=48m
-duser.timezone=gmt+08

(每一行后面不要有空格)这种方法我试过了,管用呢。还可以通过直接在注册表中添加参数。这个就不介绍了,自己没试过。
  其实解决tomcat内存的问题并不难,难得是你怎么知道这是由于tomcat内存溢出异常造成的。我们之前在这个问题上困扰了好久。如果使用eclipse,console里会打印出错误信息,那么直接就可以判断是outofmemoryerror,如果是直接部署到tomcat中,以startup.bat启动,则也可以看到打印出来的错误信息。可是我们偏偏是把tomcat服务安装成了windows的服务,那么看不到任何错误的提示。项目启动后,一直都处于等待状态,很慢很慢,让人摸不着头脑, 正赶上数据库也弄罢工,就一直以为是数据库问题。总之一句话:经验不足。

以上就是关于解决java中outofmemoryerror的全部内容,希望对大家的学习有所帮助。