随手小记:
今天下午遇到一个问题:java.lang.OutOfMemoryError: Java heap space 内存溢出问题,遇到这个问题一般有两个解决方式
第一种:修改代码程序,代码中存在大量未被释放的对象引用,或者gc()机制没有来得及回收内存
第二种:扩大jvm内存(
主要讲windows上修改方式
):
1、使用statup.bat启动tomcat的:修改bin目录下的catalina.bat文件
在文件中查找 :gotHome字符串,在其后一行添加:set JAVA_OPTS=-Xms512M -Xmx1024M
-Xms 的含义是jvm初始堆大小 -Xmx的含义是堆最大大小
2、来到了坑我了3小时候的大坑了,在项目的实际实施过程中,一般tomcat都被注册到windows的服务中(如果做已经在前面博客中写过),使用windows服务启动tomcat,这种如何修改jvm大小呢,打开注册表 win+r 然后输入 regedit 找到
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\tomcat1\Parameters\java
修改两个参数 :JvmMs 、JvmMx
JvmMs:初始内存大小
JvmMx:最大可使用内存大小
调节内存大小的可以查看任务管理器中的性能 ,根据自己的实际情况进行调整
在实际的开发中,我使用的服务器是windows server2012 R2,64位,8G内存,但是装的jdk、tomcat都是32位的,这个就有一个小坑,在32位中,内存是不允许随便放大的,8G内存我将JvmMx的值改为1.5G,tomcat就启动失败,改为1G则没有问题,后来我手动将jdk、tomcat都换成了64位的,这样一来,jvm就是随便扩大内存了(仅限在物理内存之内)