我收到此java.lang.OutOfMemoryError: PermGen space
例外情况。我正在使用Eclipse Juno和Tomcat 7.0。此异常在控制台中每10-15分钟至少发生一次。怎么解决?
Feb 25, 2016 10:23:23 AM org.springframework.beans.factory.support.DefaultListableBeanFactory destroyBean
SEVERE: Destroy method on bean with name 'mvcUrlPathHelper' threw an exception
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessBeforeDestruction(PersistenceAnnotationBeanPostProcessor.java:375)
at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:242)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:578)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:554)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:925)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:523)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:932)
at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:997)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:547)
Feb 25, 2016 10:23:24 AM org.springframework.beans.factory.support.DefaultListableBeanFactory destroyBean
SEVERE: Destroy method on bean with name 'mvcPathMatcher' threw an exception
java.lang.OutOfMemoryError: PermGen space
Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space
答案 0 :(得分:3)
什么是java.lang.OutOfMemoryError:PermGen space?
<强>答:强>
java.lang.OutOfMemoryError: PermGen space
消息表明内存中的Permanent Generation区域已用完。
允许任何Java应用程序使用有限的内存。在应用程序启动期间指定特定应用程序可以使用的确切内存量。
这个错误PermGen空间的解决方案是什么?
<强>答:强>
对于Heap,
export JVM_ARGS="-Xms1024m -Xmx1024m"
对于Permgen,
JVM_ARGS="-XX:PermSize=512M -XX:MaxPermSize=512m"
您还可以提供其他部分
-XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC XX:+CMSClassUnloadingEnabled
您还可以提供更多其他部分:)
-XX:PermSize=512m -XX:MaxPermSize=512m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -XX:SurvivorRatio=2 -XX:MaxTenuringThreshold=128 -XX:TargetSurvivorRatio=90 -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=0 -XX:CMSIncrementalDutyCycle=10 -XX:+UseTLAB -XX:+CMSParallelRemarkEnabled -XX:+CMSClassUnloadingEnabled
元空间:一个新的记忆空间诞生
JDK 8 HotSpot JVM
现在使用本机内存来表示类元数据,称为Metaspace
;类似于Oracle JRockit
和IBM JVM's
。
好消息是,这意味着不再有java.lang.OutOfMemoryError: PermGen space
个问题,您无需再调整和监控此内存空间。
相关链接:
Java 8链接
答案 1 :(得分:2)
为更多PermGenSpace配置Java很容易,但我建议迁移到Java 1.8运行时。安装Java 8 SDK并添加两行,如
data-src
到eclipse.ini。从Java 1.8开始修复此问题,不再需要任何黑客攻击。
答案 2 :(得分:1)
获得java.lang.OutOfMemoryError: PermGen space errors
时,需要增加Eclipse可用的永久生成空间。要执行此操作,请修改Eclipse的eclipse.ini
文件。
设置如下
-XX:MaxPermSize=1024m
如需更多帮助,请参阅以下链接
答案 3 :(得分:1)
相反,在eclipse.ini中进行更改,最好安装Java 8。
我安装了Java 8,现在我没有得到java.lang.OutOfMemoryError: PermGen space
例外。