加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java.lang.OutOfMemoryError:PermGen空间上的Web应用程序使用

发布时间:2020-12-14 19:28:26 所属栏目:Java 来源:网络整理
导读:我正在努力与最近出现的outOfMemory PermGen问题.出现错误时保存的日志片段之一: java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at j
我正在努力与最近出现的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个类.什么可能导致记忆不断增长?任何帮助将非常感激.

提前致谢,
卢卡斯

解决方法

在Sun JVM上,通过将JNI调用到JVM实现中,首先执行对属性和方法的反射访问.如果JVM注意到通过反射访问方法或字段,它将生成字节码来执行相同的操作 – 称为“通货膨胀”的机制.这有一个初始的速度,但之后运行速度提高了20倍.如果你做了很多反思,一个大赢家.

该字节码生成在由DelegatingClassLoader实例创建的类中,并占用了permgen空间.如果这是一个问题,您可以通过将系统属性sun.reflect.inflationThreshold设置为0(零)来关闭通货膨胀.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读