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

最近做个项目需要导excel表数据到数据库,导入时就会报 java.lang.OutOfMemoryError: Java heap space错误,后来问度娘,才知道是内存的设置的问题;

 解决办法:手动设置tomcat内存大小;

    情况一;如果是直接在tomcat部署war文件,就直接在tomcat安装路径下/bin/catalina.bat最前面加入:

                                        set JAVA_OPTS=-Xms384m -Xmx384m

   具体含义是:

内存设置 | -Xms384M                        设置JVM启动时的堆(heap)内存大小
内存设置 
| -Xmx384M                        | 设置JVM可以扩展的最大堆(heap)内存大小
调试安全 
| -Djava.security.debug=all       | 打开所有有关安全的调试输出
调试     
| -enableassertions               允许声明检查(给开发人员调试代码用的)
调试     
| -verbose:class                  允许类加载的详细调试输出
调试     
| -verbose:gc                     | 允许垃圾回收器的调试输出
图像     
| -Djava.awt.headless=true        | 允许JVM运行在在没有安装图像显示软件的情况下
本地化   
| -Duser.language=en              | 设置Tomcat用户的语言包
本地化   
| -Dfile.encoding=UTF-8           | 设置Tomcat用户的默认文件编码
网络     
| -Djava.net.preferIPv4Stack=true 让JVM用IPv4代替IPv6,Tomcat在FreeBSD系统下需要设置该参数

从上表可以看出,堆(heap)内存设置是最重要的。如果Tomcat的堆内存设置太小,可能会造成运行速度慢或者报出OutOfMemoryError的错误并造成不可知反应。如果设置太大了,又会浪费系统内存,甚至可能影响其他程序的正常运行。
如果Tomcat JVM的启动堆内存小而扩展内存大,那么在JVM在扩展内存时会影响Tomcat的反应,造成速度变慢,所以最好是把Xms和Xmx设置一样大小,至于具体内存大小可以根据情况进行测试和调整,后面将进一步讨论。
使用JAVA_OPTS参数来加载各种JVM启动参数,例如你想让Tomcat JVM运行在调试模式,并且远程用8000端口进行监控,可以使用:

JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

这会允许你连接一个JPDA远程调试器(例如各种Java IDE)。
如果你想通过JMX远程终端来做本地Tomcat监控的话可以:

JAVA_OPTS="-Dcom.sun.management.jmxremote=true \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false"

这样你可以用JMX控制台(例如JDK中带的jconsole)来连接本地Tomcat,如果需要连接远程的,则:

JAVA_OPTS="-Dcom.sun.management.jmxremote.port=8008 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.password.file=/path/to/pw/file"

如果你要设置Tomcat本地化语言,则:

$ LANG=en_US
$ catalina.sh start

或者用

-Duser.language=en 。

内容来自 :http://www.blogjava.net/javaren/articles/259792.html

你可能感兴趣的:(java.lang.OutOfMemoryError: Java heap space解决方法)