en utilisant simultanément Marque de Balayage GC Collector?
Cette question est fondée sur ma compréhension de la section Java éboueurs de lien
Ressemble à de la jvm utilise par défaut "Parallèle GC" sur windows 7 que j'ai confirmé elle -XX:+PrintCommandLineFlags -version. Cet article dit aussi
Le parallèle garbage collector utilise plusieurs threads pour effectuer la
la jeune génération de collecte des ordures. Ce collecteur doit être utilisé quand il y a beaucoup de
les travaux doivent être effectués et de longues pauses sont acceptables
je ne suis pas sûr de collecteur est utilisé pour les titulaires de l'espace collection en Parallèle GC?
Aussi je ne pouvais pas penser à des applications où de longues pauses sont acceptables(causera moins de réactivité). Quelqu'un souhaite le moins de pauses pour le GC et de faire application en tant que réactif comme il peut.
Puis j'ai lu Concurrent Mark Sweep (CMS) Collector
qui recueille le titulaire de la génération
CMS dit it require low pause times and can share resources with the garbage collection
.
Ma question est doit pas plus
des applications web à l'utilisation Simultanée de Marque de Balayage (CMS) Collecteur en raison de sa réactivité.? Je suis sûr qu'il y a d'autres facteurs aussi pour faire de la
décision mais après avoir à passer par ce lien pour m'estime que je devrais modifier la valeur par défaut GC type Simultané de Marque de Balayage (CMS) du Collecteur. Toutes les pensées/idées?
De plus je pense que l'application peut être meilleur si nous utilisons des CMS Collector et parallèle collecteur d'ensemble où la CMS est utilisé pour l'ancienne génération et parallèle fpr
jeune génération
Vous devez vous connecter pour publier un commentaire.
À aller hors de cette page, si vous utilisez le parallèle GC le parallèle nettoyer le collecteur est utilisé pour la jeune génération et parallèlement de la marque/collecteur de balayage est utilisé pour l'ancienne génération (aka permanent de la génération). Donc je suppose que la réponse est "Le Parallèle GC est utilisé pour les titulaires de l'espace de collecte, par le Parallèle GC". Bits, d'une circulaire, instruction, mais je suppose que cela a du sens.
"Longue pause" est relative, et si elles sont acceptables dépend du type d'application et de son utilisation. Les Applications qui exigent rapide de l'interaction de l'utilisateur, telles que les jeux, aurait probablement besoin d'une faible temps de pause, alors que les applications qui sont de longue durée, ont peu d'interaction de l'utilisateur (pour la nuit lot de travaux, le traitement des tâches qui peuvent être exécutées pendant plusieurs jours, éventuellement, les serveurs qui exécutent pendant de longues périodes de temps, etc.), ou ne nécessitent pas de rapide interaction de l'utilisateur (traitement de texte? Mais qui écrit les traitements de texte en Java?) n'aurait pas presque aussi stricte pause exigences, de sorte que les pauses serait OK pour ceux. En outre, les pauses ne sont pas les seulement GC facteur à prendre en considération, de sorte que même si les pauses sont OK il y a d'autres raisons que d'une table avec des pauses plus longues seraient choisis. Je vais expliquer plus bas.
Le CMS collector a des inconvénients. Dans l'article que vous avez mentionné, il y a cette ligne:
Donc pas de tas de compactage conduirait à une fragmentation du segment, ce qui pourrait être préjudiciable à la performance. Cette post-unis un autre inconvénient (je ne sais pas exactement quelle est la fiabilité de ce post, mais il semble être assez décent à un premier coup d'oeil):
Il n'y a plus de détails dans le billet de blog, que vous devriez probablement se lire comme il y a beaucoup recouverte à l'extérieur de la citer ici, ainsi que quelques fantastique de manifestations. Mais le point à retenir est que le CMS collector n'est pas un taille-ajustement tous collecteur. Il a ses inconvénients, ce qui pourrait provoquer un programmeur pour choisir un autre collecteur de la place. À l'aide de la valeur par défaut peut être OK pour de courtes applications en cours d'exécution, mais également pour des applications qui s'exécutent un tel comportement serait très mauvais...
C'est en fait le mode par défaut lorsque vous passez le
-XX:+UseConcMarkSweepGC
argument de votre VM. Mais comme indiqué ci-dessus, vous pouvez vraiment prendre le temps de réfléchir à ce que collectionneur que vous souhaitez utiliser. Sélection d'un collecteur sans tenir compte de votre cas d'utilisation n'est probablement pas une bonne idée. (Note: je pensée j'ai vu un document à partir d'Oracle sur la façon de décider de ce GC à utiliser, mais je ne le trouve pas plus d'ailleurs...)En outre, vous pourriez envisager de l'flambant neuf G1 collecteur, si vous avez Java 7u4 ou plus tard. C'est censé être le remplacement de la CMS collector.
Si vous ne spécifiez pas le drapeau "-XX:+UseParallelOldGC" la jvm va choisir la mono-thread ou le multithread collecteur basé sur le nombre de cœurs disponibles sur la machine, os, 32/64 bits, etc.
Le problème avec le CMS collector est qu'il n'a pas d'ancienne génération compactage de la mémoire conduisant à une dégradation des performances dans l'allocation de la mémoire et, éventuellement, à un arrêt dans le monde GC avec le Parallèle de GC.
Si votre application web utilise un petit tas(4-5) qui n'est pas le remplissage jusqu'à souvent (1 à 2 fois par jour) et pause de 1s/(old gen. GO) sont acceptables puis la Parallèle GC est un bon choix.
Si vous avez de plus grands segments de la CMS est une meilleure option, car elle n'induit pas long arrêt, le monde des pauses lors de la collecte de l'ancienne génération. Mais vous devriez quand même calendrier COMPLET de la mémoire gc, disons une fois par jour sur les heures creuses afin de ne compactage de la mémoire.
Ils ne peuvent pas être configurés pour être utilisés ensemble: le Parallèle GC et de la CMS. Mais la jeune génération de la collection est parallèle et stop le monde à des collectionneurs.