【问题标题】:java permgen out of memory for a swing application on linux but not on windowsjava permgen out of memory for a swing application on linux但不是在windows上
【发布时间】:2012-06-27 23:07:00
【问题描述】:

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

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

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

这个问题的原因是什么?

感谢您的帮助

【问题讨论】:

  • 出于兴趣,您是否正在调整内存分配?还是保留默认值?
  • 我知道我可以增加 permgen 空间,但我在 Windows 上运行它时默认运行它,我唯一增加的是 -Xmx512m 的堆空间
  • 我认为当你增加堆空间时你必须增加 Permgen 的大小。考虑这个来源。 mark.koli.ch/2009/01/…
  • 对不起,也许我不清楚,我在这两种情况下都增加了堆空间,当我在 Windows 上运行它时,当我在 linux 上运行它时,但是 permgen 的问题只存在于 linux 上
  • 可能是个愚蠢的问题,但是您是否分别在 windows 和 linux 中编译了代码?

标签: java swing exception out-of-memory


【解决方案1】:

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

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

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

【讨论】:

  • 我明白你的意思,我不是内存管理专家,但这不仅仅影响堆空间?
  • “这个”,我想你的意思是 32 和 64 位?如果是这样,那么答案是堆管理几乎是差异的限制......除非你有本机代码库来应对。当然,线程和内存模型可能存在细微差别,但如果您的代码一开始是正确的,它们应该不会影响您。
猜你喜欢
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 2018-08-06
相关资源
最近更新 更多