【问题标题】:Is perm gen part of heap?perm gen 是堆的一部分吗?
【发布时间】:2021-04-21 08:04:44
【问题描述】:

我开始阅读有关 java、jvm 等的内容。但是当谈到 perm gen 内存时,我不断得到不同的答案。我真的不明白,越来越糊涂,因为有很多不同的解释。那么,perm gen 是堆的一部分还是不是?

【问题讨论】:

    标签: java jvm heap-memory


    【解决方案1】:

    首先,现代 JVM 没有 PermGen

    PermGen 在 Java 8 中完全被删除了。所以学习它真的没有什么意义。 Java 8 之前的所有 Java 版本都生命周期结束,您应该在很久以前就迁移了您的代码。如果您在 Java 8 之前的 JVM 上的遗留应用程序中遇到 PermGen 问题,那是另一个移植它的原因1

    (Java 7 和更早版本)PermGen 被不同的人/来源描述为:

    • 单独的堆,或
    • “堆”的一个单独区域。

    这两种描述都是正确的,具体取决于您的观点。不可辩论的事实是:

    • PermGen 堆(或区域)的大小与“常规”堆的其余部分分开。因此,即使有常规堆空间可用,也存在 PermGen 空间耗尽的风险。
    • PermGen 垃圾收集...除了一两个例外。问题是垃圾收集很少,假设 PermGen 中实际收集的垃圾最少。

    PermGen 用于类元数据,并且(在 Java 7 之前)用于字符串池,用于对应于编译时字符串常量(例如文字)的字符串对象。在 Java 7 中,字符串池被移到了常规堆中。


    1 - 好的。有时,升级是不可能的;例如由于遗留硬件,或拒绝做明智之举的客户。但对于这些情况,您应该避免可能引入新 PermGen 问题的新代码开发。并且您应该避免可能导致 PermGen 泄漏的开发/测试/部署实践(例如热加载)。

    【讨论】:

      猜你喜欢
      • 2013-05-15
      • 2013-03-10
      • 2012-01-04
      • 2011-07-02
      • 2016-09-10
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多