gpt4 book ai didi

java - Permgen 和垃圾收集 Java,打破 permgen 神话

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:25:38 26 4
gpt4 key购买 nike

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

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

permgem 什么时候被垃圾回收?

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

我的 permgem 最大大小是 256,我不想下周出现 OutMemoryException。

请仅提供准确且记录在案的答案。

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

最佳答案

实际上,Permgen 永远不会收集垃圾是不正确的。它包含应用程序加载的类,并在 classloaders get garbage collected 时收集。 ,通常在重新部署场景中。

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

-XX:+TraceClassLoading -XX:+TraceClassUnloading

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

-verbose:class

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

对于垃圾收集标志,请参阅此 answer ,但修复 permgen 泄漏的最佳方法是查看正在创建哪些类以及为什么使用一些工具/日志。

关于java - Permgen 和垃圾收集 Java,打破 permgen 神话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21891366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com