完美解决PermGenspace异常的问题开发中遇到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的配置⽂件eclips
e.ini中也可以配置jvm参数。
-vmargs
-Xms512m
-Xmx1024m
-XX:PermSize=256M
-XX:MaxPermSize=512M
⾄此,内存溢出的问题应该就解决了。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。