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

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

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

    状况一;若是是直接在tomcat部署war文件,就直接在tomcat安装路径下/bin/catalina.bat最前面加入:数据库

                                        set JAVA_OPTS=-Xms384m -Xmx384mtomcat

   具体含义是:安全

内存设置 | -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端口进行监控,能够使用:
less

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

这会容许你链接一个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

相关文章
相关标签/搜索