La taille de la jeune génération dans la collection de déchets a un impact significatif sur les performances de la collecte des ordures. La jeune génération fait partie du tas où la plupart des nouveaux objets sont alloués, et il est collecté plus fréquemment que l'ancienne génération. La relation entre la taille de la jeune génération et les performances de la collecte des ordures implique divers compromis liés à la fréquence et à la durée des événements de collecte des ordures.
Fréquence des collections mineures
L'augmentation de la taille de la jeune génération entraîne généralement moins de collections de déchets mineurs. Des collections mineures se produisent lorsque la jeune génération se remplit, donc une jeune génération plus grande offre plus d'espace pour de nouvelles allocations avant qu'une collection ne soit déclenchée. Cela réduit la fréquence de ces collections, ce qui peut améliorer les performances, car les collections mineures sont généralement plus courtes et moins perturbatrices que les collections majeures. Lorsque la jeune génération est grande, le JVM peut allouer et survivre à plus d'objets sans avoir besoin de les récupérer immédiatement, conduisant à des interruptions moins fréquentes pour la collecte des ordures.
Taille de l'ancienne génération et des collections majeures
Cependant, si la taille totale du tas est fixe, une jeune génération plus grande signifie une vieille génération plus petite. L'ancienne génération stocke des objets qui ont survécu à plusieurs collections dans la jeune génération et ont tendance à avoir des vies plus longues. Une vieille génération plus petite conduit à des collections majeures plus fréquentes, qui sont plus coûteuses en termes de temps de pause et d'utilisation du processeur que les collections mineures. Les principales collections nettoient l'ancienne génération et peuvent avoir un impact significatif sur le débit et la réactivité des applications si elles se produisent trop souvent.
L'équilibre optimal dépend de la durée de vie des objets
La taille optimale de la jeune génération dépend de l'allocation et des caractéristiques à vie des objets de l'application. Si l'application crée de nombreux objets à courte durée de vie, une jeune génération plus grande peut améliorer les performances en réduisant la fréquence des collections mineures sans augmenter excessivement la fréquence de recouvrement majeure. Si l'application a de nombreux objets à longue durée de vie, équilibrer la taille pour garantir un espace de génération adéquat est essentiel pour éviter des collections majeures coûteuses.
Options JVM pour le réglage
La taille de la jeune génération peut être contrôlée à l'aide d'options JVM. Par exemple, l'option `-xx: newratio 'définit le rapport entre les anciennes et les jeunes générations. Par exemple, `-xx: newratio = 3` signifie que l'ancienne génération est trois fois la taille de la jeune génération, donc la jeune génération est environ un quart du tas. Des options comme `-xx: Newsize` et` -xx: maxNewSize` permettent un contrôle plus précis en définissant des tailles ou des limites fixes sur la taille de la jeune génération. La réparation de la taille de la jeune génération peut aider à stabiliser les performances de la collecte des ordures.
Espaces de survivants au sein de la jeune génération
À l'intérieur de la jeune génération, les espaces de survivants gèrent des objets qui survivent aux collections mineures mais peuvent ne pas encore être assez vieux pour la promotion de l'ancienne génération. Le réglage des tailles d'espace de survivant (configuré par `-xx: Survivorratio`) affecte la durée de la jeune génération avant la promotion. Des espaces de survivants trop petits provoquent une promotion prématurée, une augmentation de la taille de la génération et une fréquence de collecte majeure. Des survivants trop grands espaces gaspillent la mémoire et réduisent la capacité de la jeune génération pour de nouvelles allocations.
Impact sur les temps de débit et de pause
Une jeune génération plus grande réduit la fréquence des collections mineures, ce qui réduit généralement les frais généraux de GC et améliore le débit. Cependant, lorsqu'une collection mineure se produit, cela peut prendre plus de temps en raison du plus grand espace de tas pour scanner. À l'inverse, une jeune génération plus petite conduit à des collections mineures plus fréquentes mais plus courtes. L'effet global sur le débit de l'application, la latence et les temps de pause dépend de ce compromis.
réglage et journalisation empiriques
La surveillance de la journalisation de la collecte des ordures JVM peut aider à déterminer la bonne taille pour la jeune génération en analysant la fréquence et la durée des collections mineures et majeures ainsi que l'utilisation de l'espace de survivant. Des outils et des options comme `-xlog: GC, Age` fournissent des données de comportement GC détaillées pour régler ces paramètres efficacement en fonction des caractéristiques de la charge de travail réelles.
Résumé
En résumé, la taille de la jeune génération affecte les performances de la collecte des ordures par:
- Une jeune génération plus grande réduit la fréquence des collections mineures mais peut augmenter la fréquence des principales collections en raison d'une vieille génération plus petite.
- La petite génération plus petite augmente la fréquence de collecte mineure mais raccourcit la durée de la collecte mineure.
- La taille optimale dépend des modèles de durée de vie de l'objet dans l'application.
- Paramètres JVM comme `-xx: newratio`,` -xx: newsize` et `-xx: maxnewsize` contrôle la taille de la génération pour le réglage.
- Le dimensionnement de l'espace survivant a un impact sur la promotion des objets et l'efficacité globale de GC.
- Le réglage des performances nécessite un équilibre minutieux pour optimiser les temps de débit et de pause, informés par les journaux GC empiriques et la surveillance.