5

我对 permgen 溢出有一些问题。我可以使用哪些工具来查看哪些类现在加载到 permgen 以及它们使用了多少内存?谢谢。

4

2 回答 2

10

也许你有一个庞大的代码库或者正在实习大量的字符串。

尝试jmap

jmap -permstat <pid>

(注意:该permstat选项在 Windows 中不可用)

例子:

$ jmap -permstat 22982
Attaching to process ID 22982, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 17.0-b16
100691 intern Strings occupying 5641096 bytes.
finding class loader instances ..Finding object size using Printezis bits and skipping over...
done.
computing per loader stat ..done.
please wait.. computing liveness..done.
class_loader    classes bytes   parent_loader   alive?  type

<bootstrap>     303     1355992   null          live    <internal>
0xdd159fe8      9       94104   0xdd153c30      live    sun/misc/Launcher$AppClassLoader@0xae7fcfa0
0xdd153c30      0       0         null          live    sun/misc/Launcher$ExtClassLoader@0xae7b0178

total = 3       312     1450096     N/A         alive=3, dead=0     N/A

您还可以尝试将堆转储到文件中,然后将其加载到Eclipse Memory Analyzer中,这将为您提供有用的信息,例如 Leak Suspects Report 和 Dominator Tree。

jmap -dump:format=b,file=heap.bin 22982

-XX:MaxPermSize如有必要,您可以使用JVM 选项增加 PermGen 空间。

于 2010-09-24T13:23:45.483 回答
-1

看起来您搜索的是探查器。(例如jProfiler或开源:http: //java-source.net/open-source/profilers

于 2010-09-24T12:21:02.607 回答