java.lang.OutOfMemoryError: PermGen space总结

开发中遇到Eclipse报错:java.lang.OutOfMemoryError: PermGen space。

PermGen space百度翻译为:永久区域内存不足。

 

1. 先来一张jvm结构图:

 

内存不足问题一般都是发生在'堆'上,GC作用区域也是在'堆'上。

 

2. 这个'堆'又划分成了好几块区域,包括:

  新生代:包括伊甸园区和存活区。

  老年代:

  永久带:jdk1.8后变成元空间,元空间不再占用堆中的空间,而永久带却是在堆中开辟空间。

 

 

可以发现,堆中就有个永久区。永久区的内存溢出,其实就是堆的内存不够用。

只需要调大堆的内存大小就可以解决问题。

 

3. 调整堆大小的参数:

  -Xms256m -Xmx1024m

  -Xms:堆的初始化大小,这里设置成了256m.

  -Xmx:堆最大的大小,这个设置成了1024m.

  这里面就存在了一个可伸缩的空间,而这个空间的存在会损耗服务的性能。因为扩容和释放空间都是有性能损耗的。

  最好的办法就是:-Xms和-Xmx设置成同样的大小。这样就不存在可伸缩的空间了。

 

4. jvm参数的配置位置。

  a. 如果是使用tomcat服务:

    修改tomcat/bin目录下的catalina.bat。(windows环境下修改文件catalina.bat, linux环境下修改文件catalina.sh)

    

    配置在文件的第一行: 

 

 

  b.如果是eclipse

    修改eclipse的Run Configurations。(如果是debug模式,修改Debug Configurations。)

    

    写在此处,方便拷贝:

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

    

  c.如果已经被配置成了服务

    这种情况,就需要修改注册表了。

    c1. regedit命令打开注册表。

    c2. 找到配置的tomcat服务。

    

    修改:JvmMs,JvmMx,Options里面的参数值。

    c3. 修改完毕后需要重启服务。

 

  d. Eclipse的配置文件eclipse.ini中也可以配置jvm参数。

    

-vmargs
-Xms512m
-Xmx1024m
-XX:PermSize=256M
-XX:MaxPermSize=512M

至此,内存溢出的问题应该就解决了。
————————————————
版权声明:本文为CSDN博主「夏木炎」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xm393392625/article/details/79868982

posted @   逐梦北京  阅读(424)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示