java.lang.OutOfMemoryError:PermGen space

本文介绍了解决在Eclipse中启动Tomcat时出现的PermGen内存溢出问题的具体步骤。通过调整JVM参数来增加分配给Tomcat的内存空间,避免因加载类过多导致的内存不足。
问题描述:在eclipse中启动的项目中改代码然后按Ctrl+S保存,然后项目就会重新编译,发布到tomcat中,但是eclipse给运行中的tomcat空间太小,然后内存溢出就报错:

java.lang.OutOfMemoryError:PermGen space

网上查找可知该异常产生的原因是JVM默认分配的4M运行空间过小,J2EE项目加载的类过多,造成内存溢出。

解决方案为:通过添加参数增加分配给JVM的内存空间。

-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

网上的解决方案多半是针对纯Tomcat的情况,并非通过Eclipse启动的Tomcat。
或者
修改eclipse.ini配置文件,不过这些方法都不适合Eclipse运行Tomcat抛出该异常的情况。并不能解决我的问题

修改eclipse.ini配置文件增大的是Ecipse开发平台本身运行的JVM的空间,并非Eclipse启动Tomcat的内存空间。


正确的方法:点击项目右键 — Run — Run Configurations… — 选中左侧Tomcat Server — 右侧面板Arguments分标签页 — 在VM arguments尾部回车再追加上述提升初始分配空间的参数(这个参数可调)

-Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

 如下图所示:






### 回答1: "java.lang.outofmemoryerror: permgen space" 意思是Java虚拟机的永久代空间已经用完了。这是由于在运行过程中加载的类或元数据占用了太多的内存,导致永久代空间不足。可以通过增加永久代空间的大小来解决这个问题。 ### 回答2: Java.lang.outofmemoryerror: permgen spaceJava虚拟机在执行Java应用时,当永久代的内存被占满了,而无法再为新的类、反射信息、字符串等分配内存时所抛出的异常。一般来说,Java应用使用的是堆内存和永久代内存,而堆内存主要是用于对象实例化和存储,而永久代内存则主要用于存储类信息、方法信息、静态变量信息以及字符串常量等元数据信息。因此,当应用程序中有大量动态创建的类或字符串常量等元数据信息时,就容易导致永久代内存被占满,从而导致该错误发生。 要解决Java.lang.outofmemoryerror: permgen space,可以采取以下几种方法: 1、增大永久代内存:可以通过设置JVM参数-XX:PermSize和-XX:MaxPermSize来增大永久代内存的大小。 2、JVM升级:JVM的新版本优化了永久代内存的管理方式,可以通过升级JVM来解决该错误。 3、清理未使用的类:可以使用一些工具来对应用程序中未使用的类进行清理,从而释放永久代内存。 4、优化应用程序:可以对应用程序进行优化,减少其动态创建类和字符串常量等元数据信息的数量,从而减少永久代内存的占用。 5、重启应用程序:如果以上方法都未能解决该错误,可以尝试重启应用程序,从而释放永久代内存。 总之,Java.lang.outofmemoryerror: permgen space是开发过程中比较常见的错误,需要根据具体情况采取不同的解决方法。 ### 回答3: Java.lang.OutOfMemoryError: PermGen space(永久代空间)通常是在JVM内存不足时发生的错误。PermGen space指的是JVM用于存储类、方法定义等元数据的永久代空间。当JVM加载过多的类、方法或者字符串等时,PermGen space的空间可能会被耗尽,导致OutOfMemoryError的错误。 为了避免Java中的OutOfMemoryError: PermGen space错误,可以采取以下措施: 1. 调整JVM的参数。通过增加PermGen space的大小来缓解这个错误。可以通过在Java命令中使用-XX:PermSize和-XX:MaxPermSize参数来增加永久代的大小,但这样做只解决了问题的表面,没有根本解决这个问题。 2. 优化代码和资源管理。优化代码可以减少类和方法等元数据的数量,同时及时释放程序中不再需要的对象,防止内存泄漏等资源浪费现象。 3. 尽量避免使用动态代理、反射等技术。这些技术会增加系统的开销,导致产生更多的类和方法等元数据,可能会加重PermGen space的压力。 总之,避免OutOfMemoryError: PermGen space错误需要细致的内存管理及代码调优。理性使用JVM的参数调整,避免过渡依赖动态代理、反射等技术是有效的措施。同时,可以借助各种性能工具和监控工具对程序进行优化和管理,提升应用的性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值