java - 内存不足 PermGen 空间

标签 java rmi permgen

我在运行应用程序时收到 OutOfMemory: PermGen space 错误。简要说明:

从源代码运行时不会发生该错误,但从部署的 .jnlp 启动器运行时确实会发生该错误。 该错误发生在通过 RMI 从我们公司数据库检索数据的屏幕中。 从源代码运行和从启动器运行都使用相同的 RMI URL。 从源代码运行和从启动器运行都使用相同的 Java 版本 (6_38)。 该应用程序托管在 OC4J 10.1.3 中。 当错误发生时,它不仅会终止我的应用程序,还会终止 Java 控制台。

按照其他一些问题中的建议,我已将以下选项添加到应用程序服务器控件中的服务器属性中,但无济于事。

-XX:+CMSClassUnloadingEnabled
-XX:+CMSPermGenSweepingEnabled

java 控制台中记录的错误是这样的,取自跟踪文件:

Couldn't process record:
java.lang.OutOfMemoryError: PermGen space
    at sun.misc.Unsafe.defineClass(Native Method)
    at sun.reflect.ClassDefiner.defineClass(Unknown Source)
    at sun.reflect.MethodAccessorGenerator$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.reflect.MethodAccessorGenerator.generate(Unknown Source)
    at sun.reflect.MethodAccessorGenerator.generateSerializationConstructor(Unknown Source)
    at sun.reflect.ReflectionFactory.newConstructorForSerialization(Unknown Source)
    at java.io.ObjectStreamClass.getSerializableConstructor(Unknown Source)
    at java.io.ObjectStreamClass.access$1500(Unknown Source)
    at java.io.ObjectStreamClass$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.io.ObjectStreamClass.<init>(Unknown Source)
    at java.io.ObjectStreamClass.lookup(Unknown Source)

我不确定还有哪些其他信息可能有帮助,而且我不知道如何继续。欢迎任何指导。

最佳答案

如果您的 Web 应用程序中存在 ClassLoader/PermGen 泄漏,您可以使用 ClassLoader Leak Prevention library 消除它们。 .

如果您想自己查找泄漏this blog series会有帮助。

关于java - 内存不足 PermGen 空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19694713/

相关文章:

java - 如何在录制视频模式下进行人脸检测

java - 停止 RMI 服务器的干净方法

spring - PermGen 内存不足 - Netbeans

java - 我如何估计一个类的总 permgen 内存消耗?

java - Servlet 中的 JNDI 查找会导致 permgen 内存泄漏吗?

Java:数组索引越界异常

java - 为什么对象 "person1"和对象 "person2"是相同的?

java - 单击 JButton 时未启动搜索

java - 单个 RMI stub 与多个

multithreading - 如何通过 tomcat 8 中的 java 代码动态设置系统属性(而不是通过 tomcat 配置文件)