给定一个堆转储或一个正在运行的虚拟机,我如何发现永久代的内容是什么?我知道“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 做一些有用的事情。
关于java - 我如何发现永久代中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/194395/