java - 我如何发现永久代中的内容

标签 java memory garbage-collection permgen permanent-generation

给定一个堆转储或一个正在运行的虚拟机,我如何发现永久代的内容是什么?我知道“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/

相关文章:

java - 运行 JVM 的 GC 参数是什么?

java - 如何以编程方式更改 Android Toggle/LabeledSwitch 边框颜色?

java - Android Studio 中的错误 - 无法从静态上下文引用非静态方法

java - 如何知道特定功能的内存使用情况?

C++ vector 内存访问问题

c# - 为什么 GC.GetTotalMemory() 和 CLR Profiler 数字之间存在巨大差异?

java - 请求的资源上不存在 'Access-Control-Allow-Origin' header ,并且 JWT token 不以 Bearer String 开头

java - 通过查询查找已删除的行数

c# - Large Object Heap Fragmentation 会导致 64 位进程中的 OutOfMemory 吗?

c# - GC.SuppressFinalize 有保证吗?