eclipse内存溢出(Java PermGen space,Java heap space)的解决方法

"java.lang.OutOfMemoryError:Java PermGen space " 

"java.lang.OutOfMemoryError: Java heap space

今天就彻底干掉内存溢出的问题。

 

方法一:修改tomcat配置:

 TOMCAT_HOME/bin/catalina.bat(Linux上为catalina.sh)文件,在

echo Using CATALINA_BASE:上面加入这一行内容:(4G内存为例)

set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=512m -XX:MaxPermSize=1024m

参考地址:http://woo-program.iteye.com/blog/1243613 (实际验证过)

 

方法二:修改ECLIPSE配置

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

 

更改ECLIPSE文件夹下的ECLIPSE.INI文件内容如下:
-vmargs
-Xms128m
-Xmx512m
-XX:PermSize=64m
-XX:PermSize=128m

或者:

在eclipse目录下建个批处理文件eclipse.bat,用文本编辑器打开,写入如下内容:
eclipse.exe -vmargs -Xms128m -Xmx512m -XX:PermSize=128m -XX:PermSize=256m

然后保存.以后运行eclipse的时候就执行这个批处理就行了.
解释下参数的意思:
-vmargs                                   说明后面的参数都是java虚拟机(vm)的参数
-Xms128m                               虚拟机占用系统的最小内存
-Xmx512m                               虚拟机占用系统的最大内存
-XX:PermSize=64m               最小堆大小.一般报内存不足时,都是说这个太小,堆空间剩余小于5%就会警告,建议把这个稍微设大一点,不过要视自己机器内存大小来设置
-XX:PermSize=128m             最大堆大小.这个也适当边大些

 或者:

修改启动Eclipse的快捷方式为:

D:\javaDevelop\eclipse\eclipse.exe -vmargs -Xms128m -Xmx512m -XX:PermSize=128m -XX:PermSize=256m

 

以上摘自:http://blog.sina.com.cn/s/blog_4c17eecb01000ako.html

 

自我实战:

找到tomcat的VM arguments(Preferences>Tomat>JVM Settings),然后粘贴:

-Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m(推荐)

--   Xms和XX:PermSize 表示初始化大小,Xmx和MaxPermSize表示最大值,占用内存会从初始化开始递增,直到最大值,然后报内存溢出。

-- 默认为:

后来我改成:

-Xms256m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=1024m,

报错,tomcat无法启动,应该是设置的内存超出了我本机的内存(本机2G),然后我改成了了:

-XX:PermSize=256m -XX:MaxPermSize=1024m

启动tomcat,正常了。


以下摘自:http://it.100xuexi.com/view/otdetail/20120517/4f4f95b4-682c-4c7b-9417-fb88afbb6190.html

 

-XX:PermSize  应用服务器启动时, 永久存储区 的初始内存大
-XX:MaxPermSize  应用运行中, 永久存储区 的极限值。
为了不消耗扩大JVM 永久存储区分配的开销,将此参数和-XX:PermSize这个两个值设为相等。堆空间相关参数参数名参数说明
-Xms  启动应用时,JVM  堆空间 的初始大小值。
-Xmx  应用运行中,JVM  堆空间 的极限值。
为了不消耗扩大JVM 堆控件分配的开销,将此参数和-Xms 这个两个值设为相等,考虑到需要开线程,讲此值设置为总内存的80%.
-Xmn 此参数硬性规定堆空间的新生代空间大小,推荐设为堆空间大小的1/4。
上面所列的JVM 参数关系到系统的性能,而其中-XX:PermSize,
 
-XX:MaxPermSize,-Xms,-Xmx 和-Xmn 这5 个参数更是直接关系到系统的性能,系统是否会出现内存溢出。
-XX:PermSize 和-XX:MaxPermSize 分别设置应用服务器启动时,永久存储区的初始大小和极限大小 ;在生成环境中强烈推荐将这个两个值设置为相同的值,以避免分配永久存储区的开销,具体的值可取系统“疲劳测试”获取到的永久存储区的极限值;如果不进行设置-XX:MaxPermSize 默认值为64M,一般来说系统的类定义文件大小都会超过这个默认值。
 
-Xms 和-Xmx 分别是服务器启动时,堆空间的初始大小和极限值 。-Xms的默认值是物理内存的1/64 但小于1G,-Xmx 的默认值是物理内存的1/4 但小于1G.在生产环境中这些默认值是肯定不能满足我们的需要的。也就是你的服务器有8g 的内存,不对JVM 参数进行设置优化,应用服务器启动时还是按默认值来分配和约束JVM 对内存资源的使用,不会充分的利用所有的内存资源。
 
结论:
“永久存储区溢出(java.lang.OutOfMemoryError: Java Permanent Space )”乃是永久存储区设置太小,不能满足系统需要的大小,此时只需要调整 -XX:PermSize 和-XX:MaxPermSize  这两个参数即可。
“JVM 堆空间溢出(java.lang.OutOfMemoryError:  Java heap space )”错误是JVM 堆空间不足,此时只需要调整 -Xms 和-Xmx  这两个参数即可。
 
到此我们知道了,当系统出现内存溢出时,是哪些参数设置不合理需要调整

 

 

4G内存推荐配置:

 -Xms256m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m

猜你喜欢

转载自blog.csdn.net/dong__csdn/article/details/80938258