2010-05-25 4 views
4

Existe-t-il un outil permettant d'analyser les objets en cours de création entre deux collectes séparées (= nombre d'objets créés et leur type)? Heapdumps ne fonctionne pas vraiment ici car ils effectuent un GC quand ils sont invoqués (ou du moins c'est ce que j'ai observé à chaque fois jusqu'à présent), et je veux voir quels objets sont collectés par le GC, pas quels objets sont laissés après la course du GC, si cela a du sens.Analyse des objets générés par une application Java entre les GC

+1

Pour certains objets, je remplace la méthode de finalisation et j'ajoute une instruction d'impression qu'elle est gérée. Je la trouve utile quand je suspecte certains objets. Certainement Pas utile s'il y en a beaucoup. – Inv3r53

+0

voulez-vous dire quelles instances spécifiques sont collectées et quand ou combien d'instances de chaque classe sont collectées sur des événements GC spécifiques ou autre chose? et quelle JVM? Je ne suis pas au courant d'un moyen de le faire avec hotspot mais ISTR jrockit (via le centre de commande) rend compte de ce qui est collecté à chaque fois. – Matt

Répondre

2

Tout d'abord, lorsque vous observez toujours une collection d'ordures complète avant chaque décharge de tas, vous avez probablement appelé comme ceci:

jmap -histo:live $PID 

Si tel est le cas, il suffit de laisser le :live, qui supprimera les déchets explicites collection.

En outre, la machine virtuelle Java Sun connaît les options de la ligne de commande suivante:

-XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC 

Ce devrait être à peu près ce que vous voulez.

Questions connexes