Java Majeur et Mineur, la collecte des Poubelles

j'ai lu sur la collecte des ordures en Java et donc Q & r mais je suis confus au sujet des types de collecte des ordures.

prenons le collecteur de débit comme exemple. (Alias collecteur parallèle). Les docs disent qu'il utilise plusieurs threads pour faire l' mineure collections et fil simple pour Majeur collections (même que Collecteur en série).

Maintenant mes questions:

  1. Que signifie une Pleine GC: a) signifie à la fois Les collections mineures et majeures sont faites? Ou b) GC complet == grandes Collections? Qui est-ce?
  2. si a), cela signifie-t-il que la collecte mineure est encore faite en utilisant plusieurs threads alors que la majeure est faite en utilisant un seul thread?
  3. Si b), cela signifie-t-il que les générations Jeunes et anciennes ont été nettoyées à L'aide d'un seul fil?

également, 4. Le GC complet n'affecte-t-il que la vieillesse ou la jeunesse?

Merci d'avance.

22
demandé sur Sachin Verma 2013-05-14 21:14:01

2 réponses

Laissez-moi vous expliquer.

prenons le collecteur de débit comme exemple. (Alias collecteur parallèle). Les docs disent qu'il utilise des fils multiples pour faire les collections mineures et un seul fil pour les collections principales (même que Collecteur en série).

voici quelque chose à comprendre. Par défaut, sur la plupart des nouveaux systèmes, JVM utilise deux éboueurs différents pour les jeunes et les vieux. Sur ma machine: j'ai Parallèle Nouveau Collecteur pour la Jeune Génération et Simultanées de Marque et de Balayage Collector pour la génération plus âgée.

la collecte mineure est déclenchée lorsque JVM n'est pas en mesure d'allouer de l'espace pour un nouvel objet (rappelez-vous: les nouveaux objets sont toujours alloués dans L'Eden De La jeune génération).

Question Suivante:

qu'est-ce que cela veut dire par GC complet: a) est-ce que cela signifie que les collections mineures et majeures sont faites? Ou b) GC entier = = Les Grandes Collections? Qui est-ce?

et

aussi, 4. Le GC complet n'affecte-t-il que la vieillesse ou la jeunesse?

cela dépend. JVM déclare chaque Collection importante comme GC complet. [Essayez avec ces drapeaux java -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamp]. La définition pédantesque est que le GC complet fonctionne D'abord mineur suivi de Majeur (bien que l'ordre puisse être commuté si l'ancienne génération est pleine, auquel cas il est libéré d'abord pour lui permettre de recevoir des objets de la jeune génération).

OK, revenons au point. La JVM considère la collecte majeure [dans la génération plus ancienne (ou permanente)] comme une CG complète. Voici les résultats d'un programme que j'ai pu rapidement écrire pour illustrer ce point. La première ligne est le GC mineur et la seconde est le GC majeur (complet). Vous pouvez voir que cela s'est produit seulement dans la génération plus ancienne (CMS) et a été en mesure de réduire la vieille génération de 1082K à 1034K.

  • 11.431: [GC 11.431: [ParNew: 1152K->128K(1152K), 0.0009893 secs] 2111K->1210K(6464K), 0.0010182 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
  • 17.882: [Full GC (System) 17.882: [CMS: 1082K->1034K(5312K), 0.0212614 secs] 2034K->1034K(6464K), [CMS Perm : 9426K->9410K(21248K)], 0.0213200 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]

question suivante:

si a), cela signifie-t-il que la collecte mineure est encore faite en utilisant plusieurs threads alors que la majeure est faite en utilisant un seul thread?

Oui. Voir le début de ma réponse. Les générations jeunes et plus âgées sont servies par différents collectionneurs. Pour la jeune génération, vous pouvez utiliser l'un des suivantes:

  • -XX:+UseSerialGC
  • -XX:+UseParallelGC
  • -XX:+UseParNewGC

Pour l'Ancienne Génération, les choix disponibles sont:

  • -XX:+UseParallelOldGC
  • -XX:+UseConcMarkSweepGC
32
répondu goblinjuice 2013-05-14 22:23:47

alors que la réponse de goblin est encore correcte dans les grandes lignes au moins cette partie est maintenant dépassée:

Ça dépend. JVM déclare chaque Collection importante comme GC complet.

les CMS et G1 distinguent entre les collections de nouvelle génération (mineures), les collections concurrentes de l'ancienne génération et les collections complètes de gcs. Ces derniers sont en quelque sorte une solution de dernier recours et la plus grande partie de la Gccing devrait être gérée par la nouvelle génération et les collections concurrentes.

0
répondu the8472 2017-08-01 21:14:19