- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我正在处理的这个基于 Web 的 Maven 项目中,我尝试在现有的 Java 代码之上使用一些 Groovy 代码。到目前为止,每当我尝试从 Java 调用一些 Groovy 创建的对象时,都会收到史诗般的“java.lang.OutOfMemoryError: PermGen space”错误。 Web 项目使用 Jetty Maven 插件在 Jetty 上运行。
我已将烫发大小增加到以下值:-
export MAVEN_OPTS="-Xms2048m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m"
我在使用 GMaven 1.5 或 Groovy-eclipse-compiler 2.8.0-01 时遇到同样的问题。
例如,在这个 Spring MVC Controller 中,我使用 Stuff
对象,它是一个简单的 POGO。顺便说一下,这是我的整个 Java EE 项目中唯一使用的 Groovy 代码。
@Controller
@RequestMapping(value = "/")
public class HomeController {
@RequestMapping(method = RequestMethod.GET)
public String main() {
Stuff stuff = new Stuff();
stuff.setName("Bla");
System.out.println(stuff.getName());
return "home";
}
}
当我从网络上点击 Controller 时,我得到了这个:-
java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.findBootstrapClass(Native Method)
at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:926)
at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:407)
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:383)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2475)
at java.lang.Class.getDeclaredMethods(Class.java:1818)
at org.codehaus.groovy.reflection.CachedClass$3$1.run(CachedClass.java:84)
at java.security.AccessController.doPrivileged(Native Method)
at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:81)
at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:79)
at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46)
at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33)
at org.codehaus.groovy.reflection.CachedClass.getMethods(CachedClass.java:250)
at org.codehaus.groovy.runtime.m12n.SimpleExtensionModule.createMetaMethods(SimpleExtensionModule.java:111)
at org.codehaus.groovy.runtime.m12n.SimpleExtensionModule.getMetaMethods(SimpleExtensionModule.java:93)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerExtensionModuleFromProperties(MetaClassRegistryImpl.java:192)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerExtensionModuleFromMetaInf(MetaClassRegistryImpl.java:174)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.registerClasspathModules(MetaClassRegistryImpl.java:156)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:111)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.<init>(MetaClassRegistryImpl.java:73)
at groovy.lang.GroovySystem.<clinit>(GroovySystem.java:33)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:162)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:192)
at myproject.bean.Stuff.$getStaticMetaClass(Stuff.groovy)
at myproject.bean.Stuff.<init>(Stuff.groovy)
at myproject.controller.HomeController.main(HomeController.java:14)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
如果我注释掉 Controller 类中的 3 行 Groovy 代码,一切都会正常运行,不会出现错误:-
@Controller
@RequestMapping(value = "/")
public class HomeController {
@RequestMapping(method = RequestMethod.GET)
public String main() {
//Stuff stuff = new Stuff();
//stuff.setName("Bla");
//System.out.println(stuff.getName());
return "home";
}
}
如何解决这个问题?谢谢。
最佳答案
-XX:MaxPermSize=1024m
很多。这听起来像是类加载器中某处的内存泄漏。我建议启动您的分析器并分析 Activity 的类加载器。其中之一应该加载了大量的类。
如果您仍然使用 Java 5,请尝试 Java 7。如果您确实想继续使用 5,请确保将 -XX:+CMSPermGenSweepingEnabled
添加到 Java 启动选项中。
相关:
关于java - 混合 Groovy 和 Java 代码在 Jetty 上运行而不会出现 "PermGen Space"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19450767/
运行 Tomcat 失败并出现 java.lang.OutOfMemoryError - 与缺少 PermGen 空间相关的错误。 我最近将 Tomcat 更改为以自己的用户(而非 root)运行。
我需要一些信息: 我有 2 个带有 TOMCAT 7.0.28 和 JAVA jdk1.7.0_05 的 redhat 6.1 Linux 服务器 在 192.168.1.20(TOM04) 上,我有
我知道在JVM中,permgen区是用来存放类定义的。在我的 Tomcat 中,我看到 permgen 的当前内存使用量接近 100MB,似乎它只是随着时间的推移而增长,即使没有人使用 Tomcat
我正在尝试增加我的应用程序必须使用的 PermGen 空间量以避免一些 PermGen 错误。 我尝试将 JAVA_OPTS 和 MAVEN_OPTS 导出为 -Xms1024m -Xmx2048m
我遇到了一个非常严重的生产问题,我希望有人能提供帮助。 我正在使用 Spring 3.1.0 并且对其功能印象深刻。 在开发过程中,一切正常。不幸的是,在部署到生产环境时,我们遇到了一些问题。 我们正
next java release附带 removal of the permanent generation来自热点 JVM。 Java 开发人员应该知道的后果是什么? 最佳答案 来自您链接的 JE
我有一个关于 PermGen 内存分配过多的问题。 我写了一个小代码来监控这个内存空间的大小,我注意到几乎每个方法执行后分配的内存大小都会增加。也许我的应用程序中有很多全局对象?有没有办法知道在 Pe
有没有一种工具/方法可以监控 tomcat 内存使用情况,即 permgen 以避免出现如下问题。是的,我们可以增加内存并调整 GC,但仍然进行一些监控会更好。当达到某些关键内存消耗时,还希望发送警告
org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet default t
环境:Windows Server 2003 x86 Intel Xeon 2.3 4gb Ram | Tomcat 7.0.27 | jdk 1.7.0.25 我遇到了 OutOfMemoryErr
我有 tomcat 7.0.47,grails 2.3.7 中的一个项目和 windows 2003 中 RichFaces 4.3.4 中的 2 个项目 服务器(2Gb RAM)。如果我在 tomc
嘿,我在 Windows 上,我正在尝试部署 Tomcat,但我一直收到 permgen 内存异常。我读到您可以通过添加 JAVA_OPTS="-server -Xms128M -Xmx256M -X
我有一个正在运行的java进程。通过 jstat,我可以看到 permgen 利用率和容量几乎相同。即当前容量几乎已满,但仍远低于指定的最大 permgensize。 这是标准还是我应该期望看到一定程
我正在为在 JBoss 上运行的应用程序使用 JAVA 5(32 位)。但它仅适用于 32 位。当我们在 64 位 java5 上部署它时,它会抛出异常 "java.lang.OutOfMemoryE
我从官方oracle网站找到了图片 但在流行SO answer我发现永久代不是堆的一部分 Permanent Generation (non-heap): The pool containing al
我想知道 JVM 是否正常卸载类以减少 PermGen 空间。所以这是我的问题: Java 类是否会默认从 JVM 中卸载? 关闭 Jar 类加载器是否会卸载该 jar 中所有已加载的类? 应该使用什
我试图了解 HotSpot JVM 的内存结构,但对“方法区” 和“PermGen” 空间这两个术语感到困惑。我提到的文档说方法区包含类和方法的定义,包括字节码。其他一些文档说它们存储在 PermGe
java中PermGen空间的意义是什么? 最佳答案 PermGen 空间是为长期对象保留的——主要是由 ClassLoader 加载的 Class 对象。 PermGen 不会被垃圾回收,除非在非常
我知道有很多关于这个问题的问题和答案;我已经尝试了 8 或 10 种对其他人有用的不同方法,并且觉得需要分析错误的地方而不是反复试验。 我在 Windows 64 位机器上运行,Spring Tool
在我的进程中,我不断创建一个新的 Thread 对象(实际上是 Thread 的子类)(每秒最多几个),运行它并干净地结束。 我注意到,例如,当进程运行 25 天时,进程可能会死亡,留下 hprof,
我是一名优秀的程序员,十分优秀!