Passer au contenu principal

Qu'est-ce que le garbage collection Java ? Résumé des concepts Mark et Sweep, Young, Old, Perm

  • Lorsque vous faites de la programmation Java, vous entendez souvent le terme Garbage Collection. Bien que le développement soit possible sans cette connaissance dès les premières étapes du développement, il est bon de le savoir pour optimiser les performances ou éviter les fuites de mémoire.
  • C'est l'un des sujets fréquemment abordés lors des entretiens dans les entreprises qui utilisent Java.
  • Dans ce document, nous résumerons Java Garbage Collection afin que vous puissiez le comprendre facilement.
  • Ceci est un bref résumé pour vous aider à comprendre des concepts inconnus, nous vous recommandons donc de lire d'autres articles pour des informations détaillées.

Qu'est-ce que la collecte des déchets ?

  • Le nom Garbage Collection signifie collecte des déchets. Collecte automatiquement la mémoire inutilisée
    • Mémoire inutilisée : mémoire qui n'est plus utilisée.
    • Collection de mémoire : libère la mémoire inutilisée afin qu'elle puisse être réutilisée.
  • La gestion de la mémoire Java se fait via JVM.
    • Dans les langages existants, le programmeur devait gérer directement l'allocation et la désallocation de mémoire. Si la mémoire n'est pas libérée correctement, la mémoire inutilisée continue de s'accumuler et une fuite de mémoire se produit.
    • JVM est une machine virtuelle, traite automatiquement l'allocation et la désallocation de mémoire sans que l'utilisateur ait à s'inquiéter
    • Spécifiez la taille de la mémoire à utiliser par la JVM en donnant une option JVM lors de l'exécution du programme.
    • Les fuites de mémoire au niveau du système d'exploitation sont évitées en n'accédant pas directement à la mémoire au niveau du système d'exploitation.
  • Garbage Collection sécurise la mémoire en supprimant les objets inaccessibles de la zone du tas
    • objet inaccessible : un objet qui n'est plus référencé

Qu'est-ce que Mark and Sweep ?

  • caractéristique
    • La collecte des déchets se fait à l'aide de la méthode Mark and Sweep
    • L'état de la mémoire après le garbage collection est un état dans lequel l'espace mémoire est sécurisé.

Marque

  • Trouve et marque un objet accessible. Garbage Collector analyse toutes les variables de la pile pour trouver à quel objet chacune fait référence.
  • Tous les threads sont arrêtés pour le travail de Mark, cela s'appelle arrêter le monde
  • Pour les raisons ci-dessus, vous pouvez explicitement provoquer un garbage collection en appelant System.gc(), mais cela n'est pas recommandé.

Balayer

  • caractéristique
    • Supprimez les objets non marqués. Supprimer l'objet inaccessible

Zone de tas - Jeune (Eden, Survivant), Vieux, Perm

  • La zone de tas comprend les zones de jeune génération, d'ancienne génération et de permanente
  • Se compose d'un total de 5 zones
    • Jeune génération : Eden, Survivant 0, Survivant 1
    • Ancienne génération
    • Région de Perm

image

Jeune génération

  • Composé de la zone Eden, de la zone Survivant 0 et de la zone Survivant 1
  • Royaume d'Eden
    • Où se trouve l'objet nouvellement créé
    • Un GC mineur se produit lorsque la zone Eden est pleine
  • Zone des survivants
    • Où se trouvent les objets survivants du royaume d'Eden
    • Il existe deux zones, S0 et S1, dont l'une est vide et l'autre contient des objets survivants.
    • Déplacez les objets survivants de la zone Eden et de la zone Survivant non vide vers la zone Survivant vide.
    • La valeur d'âge augmente lors du passage d'une zone de survivant à une autre zone de survivant.
    • Déplacez-vous comme suit
      • Il y a des objets survivants dans S0 et S1 est vide -> Déplacez la zone Eden et les objets survivants dans S0 vers S1
      • Il y a des objets survivants dans S1, et S0 est vide -> Déplacez la zone Eden et les objets survivants dans S1 vers S0
    • Lors du déplacement, la valeur d'âge augmente et les objets survivants sont déplacés vers une autre zone de survivant.

Ancienne génération

  • caractéristique
    • Les objets qui survivent dans la jeune génération sont déplacés vers l'ancienne génération lorsque leur valeur d'âge dépasse une certaine valeur.
    • L'étape ci-dessus est appelée Promotion

Zone permanente

  • caractéristique
    • Où les métadonnées, les informations de classe, etc. sont stockées
    • Changé en Metaspace à partir de Java 8

GC mineur, GC majeur et GC complet

  • Le GC est divisé en GC mineur, GC majeur et GC complet en fonction de la zone de tas organisée.

G.C mineur

  • caractéristique
    • GC se produisant dans la jeune génération
    • Déplacez les objets survivants de la zone Eden vers la zone Survivant
    • Lorsque la zone des survivants est pleine, déplacez les objets survivants vers l'ancienne génération.
  • commande
    • Un GC mineur se produit lorsque la zone Eden est pleine
    • Déplacez les objets survivants de la zone Eden et de la zone Survivant vers la zone Survivant vide.
      • Eden + S0 -> S1 ou Eden + S1 -> S0
    • La valeur d'âge augmente lors du déménagement

Major G.C.

  • caractéristique
    • GC se produisant dans l'ancienne génération
    • Un GC majeur se produit lorsque la zone Ancienne Génération est pleine.
    • Supprime les objets inaccessibles de la zone Ancienne Génération

GC complet

  • caractéristique
    • Effectuer GC dans les zones de jeune génération, d'ancienne génération et de Perm
    • Lorsque Full GC se produit, tous les threads sont arrêtés.
    • Lorsque le GC complet se produit, le GC majeur, le GC mineur et le GC de la zone Perm se produisent tous.

source