Maison  >  Article  >  Java  >  Mécanisme de collecte des ordures JAVA

Mécanisme de collecte des ordures JAVA

大家讲道理
大家讲道理original
2017-08-19 13:44:201434parcourir

Le garbage collection est un point de connaissance important en JAVA, et c'est aussi un point de connaissance célèbre. Après tout, JAVA apporte toujours le garbage collection lorsqu'il prétend être avancé. En conséquence, il est devenu un visiteur fréquent lors des entretiens. L'intervieweur vous demande souvent d'expliquer ce qu'est la collecte des déchets et quels sont ses principes. Bien sûr, même si, et c'est certain, l'intervieweur qui vous a interrogé sur la collecte des déchets, 99 % n'en savent que peu. Lorsque l'intervieweur vous demande quel est le mécanisme de garbage collection, vous devez demander sérieusement : quelle VM posez-vous des questions sur le mécanisme de garbage collection ?

Étant donné que les concepts et les algorithmes impliqués dans le ramassage des déchets sont complexes, si vous voulez comprendre tous les détails, vous perdrez certainement plus que vous ne gagnerez. Cependant, si nous maîtrisons les grandes lignes suivantes du mécanisme de collecte des ordures, je pense que vous ne perdrez pas de points dans la plupart des entretiens.

1 : Qu'est-ce que les déchets ?

Par exemple, si vous n'utilisez plus un objet, c'est une poubelle, comme :

public void test01(){
User user = new User();
//...
}

Une fois la méthode test01 exécutée, l'objet utilisateur n'a aucune utilité, alors c'est une poubelle.

2 : Pourquoi la collecte des déchets est-elle nécessaire ?

Nous savons que les objets sont stockés sur le tas, alors quelle est la taille du tas ? Bien qu'elle puisse être ajustée via les paramètres de commande, généralement, sous les systèmes 32 bits, la taille du tas Java est définie sur 2 Go, 500 Mo sont alloués à la nouvelle génération (YoungGen) et 1,5 Go sont alloués à l'ancienne génération (OldGen). ) espace. Même s'il est en 64 bits, pensez à la quantité de mémoire matérielle dont notre PC peut disposer.

Ainsi, tous les déchets inutiles sont recyclés pour laisser la place à d'autres objets.

3 : Mécanisme de récupération de place HotSpot VM par défaut du JDK

1 : Classification de la mémoire tas

Pour comprendre ce mécanisme, il faut d'abord comprendre la classification des tas. Oui, on sait seulement que les objets existent sur le tas, mais on ne sait pas que l'intérieur du tas est également divisé en plusieurs espaces, comme le montre la figure suivante :

Mécanisme de collecte des ordures JAVA

Jeune/Nouvelle Génération La nouvelle génération

est divisée en interne en Eden et deux Espaces Survivants. Tous les objets nouvellement créés seront attribués à la nouvelle génération.

Ancienne/Tenured Generation Ancienne/Tenured Generation

L'ancienne génération est utilisée pour stocker les objets qui sont encore en vie. après plusieurs garbage collection dans le programme. Objet

(PS : Mémoire non tas de génération permanente, utilisée pour stocker des fichiers statiques, tels que des classes Java, des méthodes, etc. La génération persistante a pas d'impact significatif sur la collecte des déchets )

2 : Ordre de recyclage

L'ordre d'exécution de chaque espace est le suivant :

    1. La plupart d'entre eux ont juste Les objets créés seront stockés dans l'espace Eden.

    2. Une fois le premier GC effectué dans l'espace Eden, les objets survivants sont déplacés vers l'un des espaces survivants.

    3. Ensuite, après avoir exécuté GC dans l'espace Eden, les objets survivants seront empilés dans le même espace survivant.

    4. Lorsqu'un espace survivant est saturé, les objets survivants seront déplacés vers un autre espace survivant. L’espace survivant saturé sera alors vidé.

    5. Après avoir répété plusieurs fois les étapes ci-dessus, les objets encore vivants seront déplacés vers l'ancienne génération.

4 : Collecteur de déchets et algorithme de recyclage

Les deux types de générations ont leur propre collecteur, chacun Le collecteur utilise un algorithme différent. N’oubliez pas que pour les débutants, nous n’avons pas besoin de maîtriser tous les principes algorithmiques.

Collecteurs utilisés par le collecteur nouvelle génération : Serial, PraNew, Parallel Scavenge

Collecteurs utilisés par le collecteur ancienne génération : Serial Old, Parallel Old, CMS

Autres Les correspondants L'algorithme est le suivant,

Collecteur série (algorithme de copie)

Collecteur monothread nouvelle génération, le marquage et le nettoyage sont tous deux monothread, l'avantage est la simplicité et efficacité.

Serial Old Collector (algorithme de marquage-collation)

Collecteur monothread ancienne génération, version ancienne génération de Serial collector.

Collecteur ParNew (algorithme stop-copy)

Le collecteur nouvelle génération peut être considéré comme une version multi-thread du collecteur Serial, qui a de meilleures performances en multi Les environnements CPU -core. Serial fonctionnent mieux.

Collecteur Parallel Scavenge (algorithme d'arrêt-copie)

Collecteur parallèle, poursuivant un débit élevé et une utilisation efficace du processeur. Le débit est généralement de 99 %, débit = temps du thread utilisateur/(temps du thread utilisateur + temps du thread GC). Il convient aux scénarios tels que les applications en arrière-plan qui ne nécessitent pas de réponse d'interaction élevée.

Parallel Old Collector (algorithme stop-copy)

La version ancienne génération de Parallel Scavenge Collector, collecteur parallèle, priorité de débit

Collecteur CMS (Concurrent Mark Sweep) (algorithme de balayage de marque)

Concurrence élevée, faibles pauses, recherche du temps de pause de recyclage GC le plus court, utilisation relativement élevée du processeur, temps de réponse rapide, temps de pause court, le processeur multicœur est le choix pour rechercher un temps de réponse élevé

5 : Quand aura lieu la collecte des déchets ?

Il existe deux types de garbage collection, Scavenge GC et Full GC.

Lorsqu'un nouvel objet est généré et ne parvient pas à demander de l'espace dans Eden, Scavenge GC sera déclenché. À ce stade, le garbage collection sera effectué sur la nouvelle génération.

Lorsque l'ancienne génération (Tenured) est remplie, la génération persistante (Perm) est remplie, System.gc() est explicitement appelée et la stratégie d'allocation du tas pour chaque domaine change dynamiquement après le dernier GC, exécutez GC complet.

Notez que quel que soit le type de recyclage dont il s'agit, cela ne signifie pas que tous les déchets seront recyclés, mais qu'une certaine quantité de déchets sera éliminée dans un délai basé sur le propre jugement de l'algorithme. Cette fois et ce montant, nous sommes Inconnaissables.

Ce qui précède est le mécanisme de collecte des ordures que vous devez connaître.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn