java.lang.OutOfMemoryError: PermGen space

严重: Servlet.service() for servlet default threw exception
java.lang.OutOfMemoryError: PermGen space

 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
 at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1847)
 at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:890)
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1354)
 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
 at oracle.jdbc.driver.T4CDriverExtension.allocatePreparedStatement(T4CDriverExtension.java:70)
 at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:853)
 at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:759)
 at org.apache.commons.dbcp.PoolingConnection.makeObject(PoolingConnection.java:188)
 at org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:747)
 at org.apache.commons.dbcp.PoolingConnection.prepareStatement(PoolingConnection.java:87)
 at org.apache.commons.dbcp.DelegatingConnection.prepareStatement(DelegatingConnection.java:185)
 at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareStatement(PoolingDataSource.java:278)
 at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:534)
 at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:452)
 at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
 at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1577)
 at org.hibernate.loader.Loader.doQuery(Loader.java:696)
 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
 at org.hibernate.loader.Loader.doList(Loader.java:2232)
 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
 at org.hibernate.loader.Loader.list(Loader.java:2124)
 at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
 at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
 at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
 at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1149)
 at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
 at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:930)
 at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)

 

对于这种错误就是tomcat的问题,一般发生在上次运行没有结束,更改了文件重新部署事发生

解决方案是:重启tomcat。

### 回答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、付费专栏及课程。

余额充值