[转]java.lang.OutOfMemoryError: Java heap space 解决方法

java.lang.OutOfMemoryError: Java heap space 解决方法  

2008-11-03 12:36:19|  分类: Tomcat5|字号 订阅

 
 

异常java.lang.OutOfMemoryError: Java heap space

问题陈述

   tomcat服务器运行一段时间后,tomcat控制台报错:
   java.lang.outOfMemoryError,java.lang.outOfMemoryError
   然后tomcat服务死掉,只有重启tomcat才能恢复服务

分析

   1)java虚拟机jvm内存过小
   2)程序不严密,产生太多的垃圾 

解决方法

    没有足够的内存分配给实际运行的应用程序?两种选择:

    1)使用-Xmx参数增加堆的最大使用内存; 

    2)使用更小的集合/缓冲区/表空间/对象...,以减少所需要的内存总量,及时释放不使用的对象,也就是说,调整对象大小,重新设计、修改应用程序。

针对第一个原因

扫描二维码关注公众号,回复: 595865 查看本文章

   jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现。设置的方法主要是几个.

1.可以在windows 更改系统环境变量
加上JAVA_OPTS=-Xms64m -Xmx512m

2.如果用的tomcat,在windows下,可以在

C: /tomcat5.5.9incatalina.bat  中加上:

set JAVA_OPTS=-Xms64m -Xmx256m

位置在: rem Guess CATALINA_HOME if not defined  这行的下面加合适.

3.如果是linux系统(测试通过)
编辑  在{tomcat_home}/bin/catalina.sh文件,如 
vi /opt/apache-tomcat-6.0.14/bin/catalina.sh

#   JAVA_OPTS       (Optional) Java runtime options used when the "start",
#    "stop", or "run" command is executed.
下加入
export JAVA_OPTS="-server -Xms512m -Xmx1024m"

保存,并重新启动tomcat服务器

注意:Application Server Xms setting should not be set equal to the Xmx setting.

针对第二个原因:

   由于jvm产生的垃圾是由我们所写的代码产生的,质量好的代码产生的垃圾少,相反就会产生很多垃圾。由于jvm的最大内存不能无限增大,故增大jvm的最大内存应该是在代码已经达到很优化时才实施的,所以优化程序才是我们最先要做的。

    如何优化程序:
    第一,避免死循环。仔细检查程序,防止出现死循环,这是比较容易检查的。
    第二,可以适当手动回收垃圾 ,如调用方法System.gc()
    第三,应该及时释放各种资源:内存, 数据库的各种连接。 如置对象为null,关闭数据库连接。

猜你喜欢

转载自tsingry.iteye.com/blog/1912237