2010-09-24 2 views

risposta

-1

Sembra che quello che cerchi sia un profiler. (ad esempio jProfiler o open source: http://java-source.net/open-source/profilers)

+0

Grazie, non riesco a trovare questa opzione in jprofiler – alex543

+2

Puoi puntare qualsiasi profiler che abbia un'opzione per esplorare lo spazio di perm gen. Da quello che imparo, la maggior parte di loro esplora solo l'heap, non lo spazio dei perm gen. –

10

Forse si dispone di una base di codice estesa o si stanno eseguendo internazioni di stringhe.

Prova jmap:

jmap -permstat <pid> 

(Nota: l'opzione permstat non è disponibile in Windows)

Esempio:

$ 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/[email protected] 
0xdd153c30  0  0   null   live sun/misc/[email protected] 

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

Si può anche provare il dumping nel mucchio in un file e quindi caricandolo in Eclipse Memory Analyser, che ti fornirà informazioni utili come un report di Leak Suspects e Dominator Tree.

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

Se necessario, è possibile aumentare il vostro spazio PermGen utilizzando l'opzione -XX:MaxPermSize JVM.

+1

L'opzione 'permstat' è ora disponibile su Windows. java version "1.6.0_31" Java (TM) SE Runtime Environment (build 1.6.0_31-b05) Java Server di server a 64 bit HotSpot (build 20.6-b01, modalità mista) – Sydney