【问题标题】:Enabling JMX causes java.lang.OutOfMemoryError: PermGen space启用 JMX 会导致 java.lang.OutOfMemoryError: PermGen space
【发布时间】:2010-04-07 13:53:34
【问题描述】:

我已经实现了一个过滤器 (javax.servlet.Filter)。启用 JMX 时,我现在有一些奇怪的行为。一旦启用它,我将在短时间内收到“java.lang.OutOfMemoryError: PermGen space”错误。

我真的不明白为什么会这样。禁用 JMX 后,应用程序似乎运行良好。

【问题讨论】:

    标签: java jmx out-of-memory


    【解决方案1】:

    您需要使用命令行选项来启动您的应用程序,例如

    -XX:MaxPermSize=100m
    

    (在本例中使用 100 兆字节)。

    PermGen 空间是内存的一部分,字符串常量、类文件等驻留其中,即所有创建一次且不能被垃圾回收的东西。不是每个 JVM 都使用这个概念,但 Sun JVM 会。

    【讨论】:

    • AFAIK,permgen is 在最近的 JVM 中进行了垃圾收集,但仅在完整的垃圾收集中。而且很可能没有多少空间可以回收......因为放置在那里的物体的性质。
    • @Stephen:当然,谢谢。 PermGen 空间的精确处理取决于实现。我的描述确实很粗略。本质上,我的意思是:每个类创建一次,删除一个实例不足以使 PermGen 空间可用于垃圾收集。感谢您的评论,最好更精确(尽管 JVM 实现者可能仍会嘲笑我试图描述它的尝试 :-)
    猜你喜欢
    • 2011-04-20
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    相关资源
    最近更新 更多