【问题标题】:What does -XX:MaxPermSize do?-XX:MaxPermSize 有什么作用?
【发布时间】:2012-08-20 07:11:35
【问题描述】:

具体来说,为什么它有助于解决 PermGen OutOfMemoryError 问题?

另外,如果我的答案指向关于 JVM 参数的文档,则可以加分...

【问题讨论】:

  • oracle.com/technetwork/java/javase/tech/… 你现在将如何给我这些奖励积分? :)
  • @PaulTomblin 我不确定你链接的文章的那个人(谷歌的第一个结果)是否知道他在说什么。
  • @dystroy 我可以给你发个 cookie 吗?或者你可以对一个得到很好回答的问题感到满意;)
  • 这并没有具体回答这个问题,但如果您正在查看 JVM 内存管理,我读过的最好的文章是 this 和这个 infoq link

标签: java jvm jvm-arguments


【解决方案1】:

永久空间是虚拟机使用的类、方法、内部化字符串和类似对象的存储位置,永远不会被释放(因此得名)。

This Oracle article 简洁地介绍了 HotSpot GC 的工作和参数化,并建议您在加载许多类时增加这个空间(这通常是应用程序服务器和某些 IDE 等 Eclipse 的情况):

永久代对垃圾没有明显影响 大多数应用程序的收集器性能。然而,有些 应用程序动态生成和加载许多类;例如, JavaServer Pages (JSP) 页面的一些实现。这些 应用程序可能需要更大的永久代来持有 额外的课程。如果是这样,最大永久代大小可以 使用命令行选项 -XX:MaxPermSize= 增加。

请注意,this other Oracle documentation 列出了其他 HotSpot 参数。

更新:从 Java 8 开始,permgen 空间和此设置都消失了。用于加载的类和方法的内存模型是不同的,并且不受限制(使用默认设置)。您应该不会再看到此错误。

【讨论】:

    【解决方案2】:

    -XX:PermSize -XX:MaxPermSize 用于设置永久代的大小。

    永久代:永久代是保存类文件的地方。这些是编译的类和 JSP 页面的结果。如果此空间已满,则会触发完整垃圾回收。如果 Full Garbage Collection 无法清除旧的未引用类并且没有剩余空间来扩展永久空间,则会引发 Out-of-Memory 错误 (OOME) 并且 JVM 将崩溃。

    【讨论】:

    • 这不是在 JDK > 8 上删除,还是在所有 VM 上都使用 JDK 11?
    【解决方案3】:

    在 Java 8 中,该参数通常用于打印如下警告消息:

    Java HotSpot(TM) 64 位服务器虚拟机警告:忽略选项 MaxPermSize=512m; 8.0 中移除了支持

    您在 Java 8 中收到此消息的原因是因为 Permgen 已被 Metaspace 取代以解决 PermGen 的一些缺点(正如您亲眼所见,其中一个缺点是它具有固定大小)。

    仅供参考:关于元空间的文章:http://java-latte.blogspot.in/2014/03/metaspace-in-java-8.html

    【讨论】:

    猜你喜欢
    • 2017-12-04
    • 2016-08-05
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2023-04-10
    • 2011-07-17
    • 2014-09-13
    • 2011-12-30
    相关资源
    最近更新 更多