2

一个 Java 版本会从 Hotspot JVM中删除永久代。java开发人员应该知道的后果是什么?

4

1 回答 1

1

从您链接的 JEP 中:

将实习字符串和类静态数据移至 Java 堆可能会导致内存不足异常或 GC 数量增加。

这是我能想到的主要后果之一。您的应用程序可能会尝试加载新类并因此触发 GC 甚至获得 OOME,因为没有为此类数据保留的显式内存区域。一些应用程序可能能够从 OOME 中恢复,但我不确定当它在类加载期间抛出时是否正确,尤其是对于使用 PermGen 构建的遗留应用程序。

另一方面,不必显式配置 PermGen 会很好,尤其是在不需要更大部分的情况下。这也可能使对 PermGen 中的数据进行 GC 更容易,并降低那些可怕的 PermGen 空间错误的风险。

但是,如果存在内存泄漏,删除 PermGen 可能只会使跟踪它们变得更加困难。如果由于某种原因无法卸载类(例如在较旧的 jboss 版本中),那么哪个内存部分被阻塞并没有太大区别。泄漏仍然存在,它可能会在稍后变得明显,因为没有严格的限制。

这只是我的 2 美分,我在这里可能完全错了,但这些是我目前能想到的含义。

于 2013-09-11T09:37:40.693 回答