如何分析PermGen内容?

Dan*_*iel 25 java permgen

我想获得PermGen的转储,看看为什么它正在填充.有没有办法分析这个?我已经知道像log4j,tomcat webapp重新加载等常见的嫌疑人,但我的应用程序中也有一些自定义代理生成代码,只是想深入了解.

这有可能吗?

Pun*_*eet 26

PermGen通常由字符串文字池和加载的类组成.为了回答部分问题,即字符串文字池,我编写了一个实用程序来打印正在运行的JVM的字符串文字池.它可以在这里:

https://github.com/puneetlakhina/javautils/blob/master/src/com/blogspot/sahyog/PrintStringTable.java

它基于PermStat,它是用于通过jmap工具打印permgen统计数据的类.


Eya*_*der 18

你可以使用标志:

-XX:+TraceClassLoading -XX:+TraceClassUnloading
Run Code Online (Sandbox Code Playgroud)

它们在从永久代中加载/卸载时打印类的标识.如果添加,-XX:+PrintGCDetails您还可以跟踪permgen的大小.

请注意,我不确定除Sun之外的JVM中是否支持这些标志.

PermGen内存错误的另一个嫌疑人是字符串实习.检查代码中实习生字符串的位置.

  • 这没有解决实际问题......如何**转储permgen堆. (2认同)