我正在努力与最近出现的outOfMemory PermGen问题.出现错误时保存的日志片段之一:
java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.findClass(ModuleImpl.java:1872) at org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:720) at org.apache.felix.framework.ModuleImpl.access$300(ModuleImpl.java:73) at org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1733) at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
我增加了最大容量大小-XX:MaxPermGen = 128m,但这只是一个临时解决方案,因为我确定我们在这里面临一些内存泄漏.我们的应用程序的Web部分部署在jetty(jsf icefaces)上.点击随机组件会增加使用的内存 – 我正在使用jstat -gcold监视它,几乎每一个命中意味着3-4kb更多.我已经将-XX:TraceClassLoading添加到jvm参数,并且在Web用户界面上有任何操作时,可以看到许多sun.reflect.GeneratedConstructorAccessor和sun.reflect.GeneratedMethodAccessor被记录.当使用了99%的permgen时,我也做了堆堆.我使用YourKit分析器来分析堆.在类加载器选项卡中有一些sun.reflect.DelegatingClassLoader行,每个类有1个类.什么可能导致记忆不断增长?任何帮助将非常感激.
提前致谢,
卢卡斯