我想获得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内存错误的另一个嫌疑人是字符串实习.检查代码中实习生字符串的位置.
| 归档时间: |
|
| 查看次数: |
24464 次 |
| 最近记录: |