我刚刚在 Eclipse 3.6 开发运行时中获得了 PermGen OOM,原因是我忘记添加所需的启动参数。在注意到我认为还有其他问题之前,我启动了 JVisualVM 并从中获取了以下屏幕截图:
Used 几乎等于 Size,但 Max 仍然大一些。如果 Used 接近 Max,而不是 Size,我预计会出现 OOM。我唯一含糊的解释是 JVM 尝试分配 2 倍的已用空间,这比 Max 大。但我仍然会感谢您的评论。
答案是对的。PermGen 集独立于年轻和年老的 Gen. Max 是所有它们的总和。这是一篇关于它的文章 http://www.freshblurbs.com/explaining-java-lang-outofmemoryerror-permgen-space
jdk 对于 PermGen 的默认最大值为 64 MG。如果您忘记放置 permGen,则最大为 64 MG。
您在此处复制的图片显示 59 MG,几乎已满。这是另一个显示您的 permGen 最大值为 64 MG 的指标
我假设您已经更改了 -XX:MaxPermSize