JVM - conditions de déclenchement complet GC sont résumés et stratégie de résolution

avant-propos

GC complète le respect mineur GC, STW d'arrêt de thread utilisateur (arrêt du monde) au moins 10 fois trop long, plus lent, de sorte à éviter, le premier complet GC les raisons peuvent être générés, puis tirer des problèmes donné stratégies de résolution.

 

1, appeler la méthode System.gc ()

Dans la méthode appel de code System.gc () recommandera la machine virtuelle Java complète GC, mais notez que ceci est juste une proposition, ne fonctionne pas la machine virtuelle Java est un autre enfant en la matière, mais dans la plupart des cas augmentera le nombre de Full GC, ce qui la performance du système baisse, ne recommande généralement pas manuellement cette méthode Invoke, nous pouvons -XX: + DisableExplicitGC pour interdire RMI appel System.gc.

 

2, l'ancienne année (Titularisé Gen) Le manque d'espace
       dans la zone cible de Survivor répondre aux conditions de la promotion à la vieillesse, a été promu dans la taille de l'objet ancien est plus grande que la mémoire disponible de la vieillesse, cette fois -ci déclenchera la pleine GC.

 

. 3, zone de mémoire Metaspace atteint un seuil
       dès le début JDK8, le concept de compte permanent (le PermGen) a été jeté et remplacé par un espace de stockage appelé Metaspace. Metaspace utilisant une mémoire locale au lieu de la mémoire tas, ce qui signifie que par défaut Metaspace uniquement liée à la taille de la taille de la mémoire locale. -XX: MetaspaceSize = 21810376B (environ 20.8MB) dépasse cette valeur déclenche le détail GC, cette valeur est pas fixe, elle sera dynamiquement ajustés en tant que machine virtuelle est en marche, est associé à celui - ci une pluralité de paramètres, en détail S'il vous plaît se référer à la mise au point Metaspace de l'article

4, un mineur GC promu statistiquement dérivé à la taille moyenne de l'espace restant est plus grande que l'ancienne génération de la vieillesse
promotion survivant à l'ancienne zone de deux situations de l'objet:

       La première consiste à définir un compteur d'objets pour chaque objet, si l'objet dans la région de Eden est né, et après le premier GC, il en sera son âge est fixé à 1, l'objet dans chaque région survivant a survécu à un GC, le compteur d'âge plus un, jusqu'à atteindre la valeur par défaut de 15, sera déplacé à l'ancienne ère, les valeurs par défaut peuvent être -XX: set MaxTenuringThreshold.
       Une autre est que si la machine virtuelle Java objets trouvés de la même région Survivant âge représentait plus de la moitié de tous les objets, ils seront plus que l'objet de passer à de la vieillesse, ces objets peuvent être trouvés dans les statistiques a été promu à l'ancienne ans, ans mais je trouve qu'il n'y a pas assez d' espace pour placer ces objets, ce qui peut provoquer la pleine GC.

5, tas produire grand objet dépasse la valeur de seuil
       après la mise en PretenureSizeThreshold, la survie à long terme d'un grand objet ou des objets dans l'ancienne époque, typique des grands objets est une longue chaîne ou un tableau, ils sont créés dans: ce paramètre peut -XX directement dans l'ancienne époque, bien qu'elle puisse zone Eden peut être placé dans la nouvelle génération de l'objet, lorsque vous voulez placer l' espace de la vieille machine virtuelle Java est insuffisante si elle se trouve, il déclenche GC.

6. anciens de manque d'espace contigu

       S'il est déterminé vieux de ne pas JVM faire assez d'espace contigu pour placer des objets volumineux, il conduira à la pleine GC, comme ancienne taille de l'espace disponible est 200K, mais pas en continu, mémoire contiguë tant que 100K, et a été promu à la taille de l'objet ancien à 120K, en raison de l'espace continu 120> 100, le détail GC déclenché.

 

7, la promotion CMS GC et a échoué L'échec du mode simultané se produit lorsque
la cause complète GC cela peut se référer à cet article, l'extrait suivant de l'article aussi: JVM Tuning - GC longue pause problèmes et solutions

       échec de mise à niveau (promotion échec), le processus mineur GC, survivant non utilisée peut être insuffisante pour accueillir les objets vivants dans Eden et un autre survivant, l'excédent sera déplacé à l'ancienne époque, connu sous le nom de levage prématuré (Promotion prématurée). Cela conduira à une augmentation des années de survie à court terme des objets anciens, il peut causer de graves problèmes de performance. Plus encore, si une décennie ancienne, mineure GC'll rempliras GC, ce qui conduira à traverser l'ensemble de la pile, appelée l'échec de levage (Promotion non).


        CMS dans le processus de démarrage, la nouvelle génération de levage trop vite, restez à l'ancienne vitesse d'augmentation de taux de recouvrement de la nouvelle génération. Dans le démarrage CMS, vieux graves années de fragmentation, ne peut pas accueillir la nouvelle génération de soulever des objets volumineux, car la CMS utilise des marqueurs pour nettoyer, ce qui dans l'espace contigu insuffisant, c'est l'inconvénient de CMS

résumé

En fait, vous pouvez trouver la mémoire de tas complète GC sont généralement causées par deux raisons, la mémoire de deux anciens est trop petit, soit vieux de mémoire contiguë est trop petite. Ceci est rien de plus que deux points, tandis que la zone de métadonnées Metaspace complète GC peut être due au seuil, il est recommandé que les raisons détaillées font référence à d'autres articles, je ne vais pas lourd

 

 

Lien original: https: //blog.csdn.net/Hollake/article/details/90484027

Je suppose que tu aimes

Origine www.cnblogs.com/yrjns/p/12129119.html
conseillé
Classement