[英]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.