46 votes

Comment fonctionne Garbage-First Garbage Collector?

Quelqu'un peut-il expliquer comment fonctionne le garbage collector G1? Je n'ai encore trouvé aucune description complète et facile à comprendre.

Merci

45voto

Eugene Kuleshov Points 17757

Le collecteur divise le tas en fixe la taille des régions et des pistes les données en direct dans ces régions. Il maintient un ensemble de pointeurs - les ", se souvient ensemble" - dans et hors de la région. Lorsqu'un GC est jugée nécessaire, il recueille les régions avec moins de vivre d'abord les données (et donc, "les ordures première"). Souvent, cela peut signifier la collecte de l'ensemble de la région en une seule étape: si le nombre de pointeurs dans une région est égal à zéro, alors il n'a pas besoin de faire une marque ou un balayage de la région.

Pour chaque région, il suit les divers paramètres qui décrivent combien de temps il faudra pour les recueillir. Vous pouvez lui donner un réel souple contrainte de temps sur des temps de pause, et il essaie ensuite de recueillir autant de déchets qu'il peut dans cette contrainte de temps.

Il n'y a JavaOne parler de G1 et quelques articles sur le sujet:

35voto

Ales Plsek Points 3581

Le G1 est bien expliqué dans ce nouveau JavaOne 2012 session : G1 Garbage Collector de Réglage des Performances [youtube], [PDF].

Ils commencent avec l'introduction de la CMS et de la G1, leur comparaison, et puis le G1 analyse et le réglage est expliqué.

G1 caractéristiques

  • Fixe la Taille des Régions tas divisé en régions (1 mo - 32 MO ~2000, déterminé par la machine virtuelle).
  • Eden, survivants et OldGen représenté comme un ensemble logique de régions.
  • Les objets vivants sont évacués à partir d'une région à l'autre

Un typique G1 segment peut ressembler à:

A typical G1 heap may look like:

Voici un résumé de chaque phase G1:

1. Les Jeunes De La Collection

1.1 Jeunes de Phase - Minor GC

  • Évacuation - Stop-Le-Monde Parallèle minor GC où les objets vivants sont évacués de la Jeune Génération, soit en pension de régions (tenuring) ou OldGen régions (promotion).
  • De la comptabilité ,- la taille de l'eden/survivant de l'espace pour les jeunes GC est déterminée en se basant sur les statistiques de chaque région et basé sur la pause de la cible définie par l'application. G1 estimations combien de temps il aura besoin pour la prochaine YoungGC.
  • Le redimensionnement - G1 pouvez maintenant facilement réduire/redimensionner eden/survivant régions.

1.2 Les Jeunes Ou Le Lancement De La Marque

  • GC jeunes initiale de la marque est une première phase de marquage pour la OldGen collection qui est exécuté en parallèle avec la YoungGC collection. La première marque est un parallèle simultanée processus de marquage.

2. Old Gen Collection

2.1 Initiales de la Marque - voir point 1.2.

2.2 GC remarque

  • un cessez-le-monde pause, concurrenlty marquage direct des objets
  • comptabilité - pour chaque région, au cours de remarque, G1 est suivi liviness de la région(combien d'objets sont vivants dans chaque région), et les références dans la région (de Rappeler Set) - ceci indique G1 combien de temps est nécessaire à la réalisation d'une collection sur cette région.
  • Les Régions vides récupérés

2.3. GC pause (mixte)

  • choisir les régions à faible liviness et de recueillir certains d'entre eux. Par conséquent, nous collectons les "ordures première".
  • la collecte effective de ces régions est effectuée en même temps que la prochaine Jeune GC, donc il n'y a pas de pause pour la collecte de la OldGen. Par conséquent, le GC pause (mixte) est une collection mixte de YoungGen et une partie de l'ancien Général.
  • À la fin de la GC pause (mixte) il peut y avoir certains déchets laissés dans le vieux-gen régions, ce seront recueillies ultérieurement en fonction de l'avenir liviness, le temps de pause de la cible et le numéro de la partie inutilisée des régions.

3. Full GC

Notez que G1 est destiné à éviter Full GC autant que possible. Comme de Java 7u40, FullGC des pauses dans le G1 ne sont pas optimisés et sont mis en œuvre comme une opération mono-thread. Lors de l'utilisation de G1, essayez d'éviter de Plein GC - si vous voyez des FullGC pauses, votre GC configuration probablement nécessite quelques réglages.

Ressources

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X