我们注意到,我们的客户运行Solaris 10的永久GC从50%增长到97%的容量。这个JVM使用的是默认值" Permgen“(我们没有向JVM传递任何自定义Permgen标志)。
与其在生产中运行97%的permgen空间,不如设置一个更高的PermGen值吗?
P.S :我们在solaris 10上使用JDK 1.6.0_23。
UPDATE我们应该认为它很快就可以做OutOfMemoryError了吗?或者JVM是否有可能增加容量,从而使使用率降到97%以下?
发布于 2011-03-25 13:30:19
PermGen将增长到预定的最大值(您可以从命令行设置这个最大值),然后停止。PermGen区域主要保存类定义,通常在加载大量类而不发布类的应用程序中耗尽PermGen --要么是因为它们很大,要么是因为在web应用程序中,在类加载器发布后,有东西意外地抓住了一个类。您需要确定PermGen是否持续增长,还是最终稳定下来。
发布于 2011-03-25 13:33:22
PermGen空间在应用程序代码或正在使用的库中使用随着时间的推移,可能会出现某些内存泄漏/错误。。
例如,在Apache中运行webapp时经常会出现问题,如果webapp实例被重新加载太多次,则使用Spring和log4j,显然log4j存在一些问题,它不能正确地从类加载器卸载某些类。
因此,确实有可能出现导致PermGen空间随时间增长的泄漏,就像正常的内存泄漏一样。
发布于 2011-03-25 13:29:33
你的推理有点不清楚。
如果您预期会失败,为什么不立即采取防御性方法并增加-XX:MaxPermSize呢?
https://stackoverflow.com/questions/5433052
复制相似问题