在将 Spring 3.2 迁移到 Spring 4.1 时,我在访问 JSP 时遇到以下错误。
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9910)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9890)
at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8454)
at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:718)
at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:383)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:428)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:450)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:321)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
应用程序的其余服务和其他内部业务逻辑工作正常。每当我尝试访问任何 jsp 时,都会出现以下错误。
这些是我在我的应用程序中使用的与 JSP 相关的依赖项。
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
我使用的是 tile 3,并添加了 Tiles 的所有相关依赖项。 知道如何解决这个问题吗????另外,帮我解决依赖关系,我有一个以 Apache Tiles 和 JSP 作为前端的 Spring MVC 应用程序。
最佳答案
您的堆栈跟踪表明您已经用完了 PermGen 空间,因此您需要分配更多空间。这里有一个链接可以指导您完成为 tomcat 执行此操作的步骤: http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/
基本上,你只需要添加
-XX:MaxPermSize=<size>
用于启动 tomcat 的 JVM 参数,其中 <size>
是要分配的 perm gen 空间量。例如
-XX:MaxPermSize=512m
如果您有兴趣,这不是升级依赖项的直接结果,更像是副作用 - 较新版本的库需要更多 Perm Gen 空间,因此在升级过程中,您的应用程序已经结束现有限制,因此您需要添加更多。
关于java - Spring 4 迁移 : OutOfMemoryError: PermGen Space,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32192495/