给定一个堆转储或正在运行的VM,我如何发现永久代的内容是什么?我知道“jmap -permstat”,但是在Windows上不可用。
最佳答案
本文Memory Monitoring with Java SE 5描述了如何以编程方式发现有关堆使用情况,内存池(包括permgen空间)等的信息。它非常简单:
MemoryUsage usage = ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage();
long nonHeapFree = usage.getMax() - usage.getUsed();
long nonHeapTotal = usage.getMax();
在我对OSX(Sun VM)的测试中,“非堆内存使用情况”紧密匹配为permgen池返回的值,并且大概会在没有permgen的VM上做一些有用的事情。