【发布时间】:2021-04-21 08:04:44
【问题描述】:
我开始阅读有关 java、jvm 等的内容。但是当谈到 perm gen 内存时,我不断得到不同的答案。我真的不明白,越来越糊涂,因为有很多不同的解释。那么,perm gen 是堆的一部分还是不是?
【问题讨论】:
标签: java jvm heap-memory
我开始阅读有关 java、jvm 等的内容。但是当谈到 perm gen 内存时,我不断得到不同的答案。我真的不明白,越来越糊涂,因为有很多不同的解释。那么,perm gen 是堆的一部分还是不是?
【问题讨论】:
标签: java jvm heap-memory
首先,现代 JVM 没有 PermGen。
PermGen 在 Java 8 中完全被删除了。所以学习它真的没有什么意义。 Java 8 之前的所有 Java 版本都生命周期结束,您应该在很久以前就迁移了您的代码。如果您在 Java 8 之前的 JVM 上的遗留应用程序中遇到 PermGen 问题,那是另一个移植它的原因1。
(Java 7 和更早版本)PermGen 被不同的人/来源描述为:
这两种描述都是正确的,具体取决于您的观点。不可辩论的事实是:
PermGen 用于类元数据,并且(在 Java 7 之前)用于字符串池,用于对应于编译时字符串常量(例如文字)的字符串对象。在 Java 7 中,字符串池被移到了常规堆中。
1 - 好的。有时,升级是不可能的;例如由于遗留硬件,或拒绝做明智之举的客户。但对于这些情况,您应该避免可能引入新 PermGen 问题的新代码开发。并且您应该避免可能导致 PermGen 泄漏的开发/测试/部署实践(例如热加载)。
【讨论】: