2010-10-16 3 views
4

En JDK 1.6: je vois que GC complet a été exécuté mais l'espace génération et perm gen n'est pas utilisé complètement - question est selon ma compréhension FGC fonctionne seulement lorsque old gen ou perm gen est plein - je ne suis pas capable de comprendre pourquoi il a fonctionné même si l'utilisation% est faible?GHz complète - Fréquence JVM Sun de run

Voir sortie de jstat -gcutil ci-dessous:

 
    S0  S1  E  O  P  YGC  YGCT FGC FGCT  GCT 
0.00 82.14 51.17 13.78 26.43 219 19.347  1 0.131 19.479 

    S0  S1  E  O  P  YGC  YGCT FGC FGCT  GCT 
82.14 0.00 9.12 13.92 26.66 222 19.771  1 0.131 19.902 

    S0  S1  E  O  P  YGC  YGCT FGC FGCT  GCT 
82.14 0.00 11.07 9.07 24.15 230 20.166  2 1.851 22.017 

Mon min/max tas est 1024M et min et max espace PermGen est défini comme 768M.

+0

Une raison possible pourrait être RMI: "RMI force la collecte complète périodique.La fréquence de ces collections peut être contrôlée avec properties.java -Dsun.rmi.dgc.client.gcInterval et -Dsun.rmi.dgc.server. gcInterval "http://java.sun.com/docs/hotspot/gc1.4.2/ – Anna

Répondre

0

FGC ne fonctionne que lorsque ancienne génération ou perm gen est pleine

Il est pas vrai. Lire le document de référence java here

La gestion de la mémoire en Java peut surprendre tout le monde. Il faut de nombreuses années pour apprendre à définir les paramètres JVM pour les applications non triviales.

L'espace permGen est défini comme 768M.

Diminution à 128M

+0

Vous ne pouvez pas réduire l'espace perm gen - comme notre application le consomme énormément ... y a-t-il un inconvénient à utiliser une valeur élevée pour cela? – Anna

+0

Pourquoi l'application consomme-t-elle beaucoup de temps? Est-ce que vous utilisez dom xml parser ou comparez plusieurs chaînes d'appel interne? – iddqd

+0

A partir du lien pdf que vous avez cité: "Lorsque la jeune génération se remplit, une collection de jeunes générations (parfois appelée collection mineure) de cette génération est exécutée.Lorsque la génération ancienne ou permanente se remplit, ce qui est connu comme une collection complète de (parfois appelée collection majeure) est généralement faite ". Quels sont ces cas où les anciens/perm gen ne sont pas pleins et pourtant GC est fait? – Anna

1

je résolu le problème en plaçant le jvm opts: XX:-DisableExplicitGC.

Un code dans un fichier jar externe peut avoir appelé explicitement System.gc entraînant un tel comportement de récupération de place. En désactivant ces derniers, le comportement attendu de Garbage Collection était en cours d'exécution lorsque l'utilisation à 100% était sur le point d'être atteinte.

1

Activer le gc verbeux pour maintenant exactement quand le gc complet est arrivé. Parce que jstat montre des événements FGC même pour des collections majeures/permanentes

For more info visit.