2

我有一个 Swing 应用程序,当我在 Windows 上运行它时我没有问题,但是当我在 linux 上运行它时,我在使用它几次后出现内存不足 permgen 异常。

在 Windows 上我使用 jdk6 更新 32 32 位,在 linux 上我使用相同的 jdk 6,相同的更新版本但 64 位。

当我在 windows/linux 上运行应用程序时,唯一改变的是外观,当我在 windows 上运行它时,我使用一个,当我在 linux 上运行它时,我使用另一个,但它们都来自 jgoodies 站点。

这个问题的原因是什么?

谢谢您的帮助

4

1 回答 1

3

虽然您认为这是 Windows 与 Linux 的区别,但我认为这两个系统之间更显着的区别是 32 位与 64 位。

在 64 位 JVM 上,引用和引用值字段占用两倍的字节数,并且在其他情况下填充会增加。由于 String 对象包含引用字段等,这足以使对象变大。如果您有大量字符串文字或手动实习字符串,这可能会导致更多的 PermGen 使用。

无论哪种方式,显而易见的解决方案是通过 JVM 命令行选项增加 Permgen 大小。实际上,除了想办法减少应用程序的 Permgen 使用(这可能不切实际)之外,这可能是唯一的解决方案。

于 2012-06-27T23:18:54.170 回答