首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Permgen和垃圾收集Java,打破了permgen的神话

Permgen和垃圾收集Java,打破了permgen的神话
EN

Stack Overflow用户
提问于 2014-02-20 04:12:13
回答 1查看 424关注 0票数 3

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

permgen从来不会被垃圾回收,我的意思是那里使用的内存一直在增长,这是真的吗?

当permgem被垃圾回收的时候?

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

我的permgem的最大尺寸是256,我不想在下周有一个OutMemoryException。

请只提供准确和有记录的答案。

我使用Tomcat 7,Java 7,我使用了很多并行部署技术,我每周都会取消部署,重新部署几次。我从不使用字符串的intern()方法

EN

回答 1

Stack Overflow用户

发布于 2014-02-20 04:34:20

实际上,Permgen从来没有被垃圾回收的说法是不正确的。它包含由应用程序加载的类,并在classloaders get garbage collected时收集,通常是在重新部署场景中。

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

代码语言:javascript
复制
-XX:+TraceClassLoading -XX:+TraceClassUnloading

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

代码语言:javascript
复制
-verbose:class

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

因为垃圾收集标志引用这个answer,但是修复permgen泄漏的最好方法是查看正在创建哪些类,以及为什么要使用一些工具/日志。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21891366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档