使用Java 64位启动应用程序时收到的PermGen空间错误

时间:2012-06-18 16:03:10

标签: java 64-bit jnlp out-of-memory permgen

我有一个Eclipse(基于插件的)应用程序,我尝试从jnlp文件开始使用Java 64bit(我使用maven tycho来构建它)。启动应用程序后不久,它就不再响应,有时甚至会自动关闭。如果使用Java 32bit启动应用程序,则应用程序可以正常工作。

如果我检查日志文件,我会得到java.lang.OutOfMemoryError:PermGen空间异常。 我已将MaxPermSize增加到756m但仍无法正常工作。我可以看到,当应用程序被阻止时,CPU的使用率几乎达到100%。

如果您对我可以解决问题或解释有任何建议,请分享。

谢谢!

2 个答案:

答案 0 :(得分:0)

加载许多类时,Perm空间会被填充。

从此FAQ

  

如何判断永久性一代是否填满?

     

从1.4.2 -XX开始:+ PrintGCDetails将打印有关在每个垃圾收集中收集的堆的所有部分的信息。完整系列

     <完全GC [Tenured:30437K-> 33739K(280576K),0.7050569 secs] 106231K-> 33739K(362112K),[Perm:2919K-> 2919K(16384K)],0.7052334 secs]

     

这个例子显示在永久世代中收集的很少(从收集前使用的2919K到收集后使用的2919K),永久世代的当前大小为16384K。

如果您遇到类加载程序泄漏,您可能会对this article"how to fix" article感兴趣。

答案 1 :(得分:0)

我的解决方案是改为Java 1.7。我之前尝试过使用Java 1.6.0_26_x64和Java 1.6.0_29_x64,并且遇到了上述错误。

我现在已经改为Java 1.7.0_04_x64,它运行顺畅,完全没有阻塞。

编辑:它也适用于Java 1.6.0_33。