繁体   English   中英

Permgen和Garbage收集Java,打破permgen神话

[英]Permgen and Garbage collection Java, Busting permgen myths

我知道在JVM中,permgen区域用于存储类定义。 在我的Tomcat中,我看到permgen的当前内存使用量接近100MB,它似乎只是随着时间的推移而增长,即使没有人在Tomcat中使用应用程序我的问题是:

permgen永远不会被垃圾收集,我的意思是那里使用的内存不断增长和增长是真的吗?

当permgem被垃圾收集?

什么意思是“CMSPermGenSweepingEnabled”和“CMSClassUnloadingEnabled”?

我的permgem的最大大小是256,我不希望下周有一个OutMemoryException。

请只准确并记录答案。

我使用Tomcat 7,Java 7,我使用了很多并行部署tecnique而且我没有使用,每周重新部署几次。 我从不使用字符串的intern()方法

实际上,Permgen永远不会收集垃圾。 它包含由应用程序加载的类,并在类加载器被垃圾收集收集 ,通常在重新部署方案中。

您可以使用这些JVM标志来查看何时从permgen加载和卸载类:

-XX:+TraceClassLoading -XX:+TraceClassUnloading

要查看加载了哪些类,请使用以下标志:

-verbose:class

如果应用程序是反射密集型的,那也可能是一个原因,看看这个答案 ,尝试使用visualvm来获取堆转储,查找名为lie sun.reflect.GeneratedMethodAccessor11类。

对于垃圾收集标志,请参考这个答案 ,但修复permgen泄漏的最佳方法是查看正在创建的类以及使用某些工具/日志的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM