Возможно, у вас большая кодовая база или вы интернируете много строк.
Попробуйте 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 , который предоставит вам полезную информацию, такую как отчет об утечках и дерево доминант.
jmap -dump:format=b,file=heap.bin 22982
При необходимости вы можете увеличить пространство PermGen с помощью опции -XX:MaxPermSize
JVM.