解决Java中OutOfMemoryError的问题

 更新时间:2015年09月26日 17:31:14   投稿:lijiao  
这篇文章主要介绍了解决Java中OutOfMemoryError的三种方法,需要的朋友可以参考下

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

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

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

这种情况下,我们要修改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选项下:下方的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的全部内容,希望对大家的学习有所帮助。

相关文章

  • Java实现多文件上传功能

    Java实现多文件上传功能

    这篇文章主要为大家详细介绍了Java实现多文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • 使用java技术抓取网站上彩票双色球信息详解

    使用java技术抓取网站上彩票双色球信息详解

    这篇文章主要介绍了使用java技术抓取网站上彩票双色球信息详解,web结果由html+js+css组成,html结构都有一定的规范,数据动态交互可以通过js实现。,需要的朋友可以参考下
    2019-06-06
  • SpringBoot + proguard+maven多模块实现代码混淆的方法

    SpringBoot + proguard+maven多模块实现代码混淆的方法

    这篇文章主要介绍了SpringBoot + proguard+maven多模块实现代码混淆的方法,多模块跟单模块一样,在需要混淆模块的pom文件中加入proguard依赖及配置,本文给大家讲解的非常详细,感兴趣的朋友一起看看吧
    2024-02-02
  • Java中Date时区的转换代码示例

    Java中Date时区的转换代码示例

    这篇文章主要给大家介绍了关于Java中Date时区转换的相关资料,当在不同的时区使用相同程序,时间的值只会为当地时间,这样就会造成时间混乱,需要的朋友可以参考下
    2023-07-07
  • Java实现导出word表格的示例详解

    Java实现导出word表格的示例详解

    这篇文章主要为大家详细介绍了如何利用Java语言导出word表格功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以参考一下
    2022-12-12
  • SpringBoot在线代码修改器的问题及解决方法

    SpringBoot在线代码修改器的问题及解决方法

    这篇文章主要介绍了SpringBoot在线代码修改器的问题及解决方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • mybatisPlus 实体类与数据库表映射关系详解

    mybatisPlus 实体类与数据库表映射关系详解

    这篇文章主要介绍了mybatisPlus 实体类与数据库表映射关系详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • Resty极简restful框架快速接入Spring

    Resty极简restful框架快速接入Spring

    这篇文章主要为大家介绍了Resty极简的restful框架快速接入Spring详细说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Netty进阶之EventExecutorGroup源码详解

    Netty进阶之EventExecutorGroup源码详解

    这篇文章主要介绍了Netty进阶之EventExecutorGroup源码详解,EventExecutorGroup继承了JDK的ScheduledExecutroService,那么它就拥有了执行定时任务,执行提交的普通任务,需要的朋友可以参考下
    2023-11-11
  • Java中的接口及其应用场景解读

    Java中的接口及其应用场景解读

    这篇文章主要介绍了Java中的接口及其应用场景解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论