在我的应用程序中,我遇到了PermGen内存不足的错误,并希望查看是什么导致了这个问题。
我已经通过VisualVM连接到了我的应用程序。
我想要查看到底是什么在我的应用程序中占用了这么多的PermGen内存,但是我不能在VisualVM中单独获取“PermGen Heap”。我只能获取标准HeapDump。
是否有可能使用VisualVM或其他工具找出到底是什么在占用我的所有PermGen内存?
更新: 这个问题被标记为“重复”,但实际上我没有在提到的主题中看到我的问题的答案。问题是我不知道如何列出确切地占用了我的PermGen空间的内存。
目前,从该主题中我知道以下提示:
1. 运行jmap -permstat并查看intern Strings占用了多少PermGen。好主意,它起作用了:现在我知道String Pool在我的情况下不是一个问题。
2. 运行jmap -permstat并查看类加载器消耗的内存。它可以工作,但AppClassLoader中有数百个类,这对我帮助不大。
3. 运行PrintStringTable.java util以查看哪些字符串占用内存。我无法在我的Windows 7 PC上运行它,因为我得到了“连接到进程ID XXXX,请等待...连接调试服务器时超时(请启动SwDbgSrv.exe)”的错误。
无论如何,这不是我的情况。
4. 通过指定JVM属性跟踪运行时的类加载。它可以工作,但不能帮助我理解是什么占用了内存,有数千个类被加载。
因此,我在这里看不到我的问题的答案。我知道PermGen不仅被类本身所占用,还被它们的静态成员占用。我该如何跟踪哪些类的静态成员消耗了内存?
如果我错过了这个答案,请告诉我。
我已经通过VisualVM连接到了我的应用程序。
我想要查看到底是什么在我的应用程序中占用了这么多的PermGen内存,但是我不能在VisualVM中单独获取“PermGen Heap”。我只能获取标准HeapDump。
是否有可能使用VisualVM或其他工具找出到底是什么在占用我的所有PermGen内存?
更新: 这个问题被标记为“重复”,但实际上我没有在提到的主题中看到我的问题的答案。问题是我不知道如何列出确切地占用了我的PermGen空间的内存。
目前,从该主题中我知道以下提示:
1. 运行jmap -permstat并查看intern Strings占用了多少PermGen。好主意,它起作用了:现在我知道String Pool在我的情况下不是一个问题。
2. 运行jmap -permstat并查看类加载器消耗的内存。它可以工作,但AppClassLoader中有数百个类,这对我帮助不大。
3. 运行PrintStringTable.java util以查看哪些字符串占用内存。我无法在我的Windows 7 PC上运行它,因为我得到了“连接到进程ID XXXX,请等待...连接调试服务器时超时(请启动SwDbgSrv.exe)”的错误。
无论如何,这不是我的情况。
4. 通过指定JVM属性跟踪运行时的类加载。它可以工作,但不能帮助我理解是什么占用了内存,有数千个类被加载。
因此,我在这里看不到我的问题的答案。我知道PermGen不仅被类本身所占用,还被它们的静态成员占用。我该如何跟踪哪些类的静态成员消耗了内存?
如果我错过了这个答案,请告诉我。