java 获取permgen_java – 如何查看PermGen中存储的确切内容?

在我的应用程序中,我有一个PermGen内存不足错误,我想知道导致它的原因.

我通过VisualVM连接到我的应用程序.

我想知道在我的应用程序中究竟消耗了如此多的PermGen内存,但我无法在VisualVM中使用特殊的“PermGen Heap”.我只能采用标准的HeapDump.

是否有可能使用VIsualVM或其他工具找出究竟消耗我所有PermGen内存的内容?

UPDATE

这个问题被标记为“重复”,但实际上我在上述主题中没有看到我的问题的答案.问题是我没有看到一种方法来准确列出我的permgen空间中消耗内存的内容.

目前从该主题我知道以下提示:

>运行jmap -permstat,看看实习生字符串使用了多少PermGen.好主意,它的工作原理:现在我知道字符串池在我的情况下不是问题.

>运行jmap -permstat,看看类加载器如何使用内存.它有效,但AppClassLoader中有数百个类,这对我没什么帮助.

>运行PrintStringTable.java util以查看哪些字符串占用内存.我不能在我的Windows 7 PC上运行它,因为我得到了

Attaching to process ID XXXX, please wait… Error attaching to

process: Timed out while attempting to connect to debug server (please

start SwDbgSrv.exe).

无论如何,这不是我的情况.

>通过指定JVM属性来跟踪运行时中的类加载.它有效,但不能帮助我理解什么需要记忆,有数千个类加载.

所以我在这里看不到我的问题的答案.

我知道PermGen不仅被类自己消耗,而且被静态成员消耗.如何跟踪哪些类消耗内存的静态成员?

如果我错过了这个答案,请告诉我.

最佳答案 VisualVM的堆转储应该足以调查你的permgen问题 – 我必须解决太多的PermGen内存泄漏,而VisualVM始终是我的起点.

如果你执行堆转储,它将包括有关permgen的信息 – 类,类加载器等 – 我个人然后使用Eclipse Memory Analyser tool – 只需加载整个转储,它可以提供泄漏可疑报告,重复类报告等.一般来说,我只是转到重复的类列表,右键单击并选择“查找GC根”,然后您可以从中缩小某些问题.

顺便说一句,你是否正在做任何特殊的类加载等?使用类加载器显式重新加载或加载?它只是直接的Java吗?是在容器等吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值