java.lang.OutOfMemoryError: PermGen space

异常描述:运行项目期间不定时出现此异常

具体异常信息:

严重: Unexpected death of background thread ContainerBackgroundProcessor[StandardEngine[Catalina]]
java.lang.OutOfMemoryError: PermGen space
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2957)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1210)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1690)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    at freemarker.template.Template.<init>(Template.java:166)
    at freemarker.cache.TemplateCache.loadTemplate(TemplateCache.java:447)
    at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:360)
    at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:235)
    at freemarker.template.Configuration.getTemplate(Configuration.java:578)
    at freemarker.template.Configuration.getTemplate(Configuration.java:543)
    at org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.init(DefaultDispatcherErrorHandler.java:48)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:488)
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4854)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5542)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:4033)
    at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:425)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1546)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1556)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1556)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1524)
    at java.lang.Thread.run(Thread.java:745)

Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: PermGen space
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2957)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1210)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1690)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    at freemarker.template.Template.<init>(Template.java:166)
    at freemarker.cache.TemplateCache.loadTemplate(TemplateCache.java:447)
    at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:360)
    at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:235)
    at freemarker.template.Configuration.getTemplate(Configuration.java:578)
    at freemarker.template.Configuration.getTemplate(Configuration.java:543)
    at org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler.init(DefaultDispatcherErrorHandler.java:48)
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:488)
    at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4854)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5542)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:4033)
    at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:425)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1546)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1556)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1556)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1524)
    at java.lang.Thread.run(Thread.java:745)

解决方法:

参考网址:http://www.cnblogs.com/hongten/archive/2012/11/16/java_PermGen_space.html

1.按照参考网址中的方法1,结果:失败;

2.按照参考网址的方法2,结果:失败;

按照参考网址的方法2重设eclipse.ini文件,如下图:

——异常依旧(修改后似乎eclipse运行时间长一些)

现在此对Tomcat的catalina.bat进行修改:

1.先还原catalina.sh中的缓存配置(注:因为我的项目运行环境是Windows,原来是在catalina.sh中设置缓存——设置错了,应在catalina.bat进行设置,所以现在把相应的设置给删除了,删除后如下所示,这是Tomcat的默认代码)

2.重新设置在catalina.bat设置缓存大小:

a.原来我的设置:

b.重新设置:

在注释“rem ----- Execute The Requested Command ---------------------------------------”与代码“echo Using CATALINA_BASE:   "%CATALINA_BASE%"”直接添加:

set JAVA_OPTS=%JAVA_OPTS% -Xms2048m -Xmx4096m -XX:CompileThreshold=8000 -XX:PermSize=1024m -XX:MaxPermSize=2048m -Xverify:none -da
echo Using JAVA_OPTS:%JAVA_OPTS%

添加后如下图所示:

原文地址:https://www.cnblogs.com/wql025/p/4865673.html