La JVM peut-elle réduire les pauses GC à moins de 1 ms comme Go ?
Le langage de programmation Go offre de faibles pauses GC, généralement inférieures à 100 microsecondes. Cependant, la machine virtuelle Java (JVM) a rencontré des difficultés pour atteindre des performances similaires.
Contraintes architecturales
Historiquement, les différences architecturales entre Go et Java ont influencé les temps de pause du GC. .
-
Collecteur non compactant de Go : Le GC de Go ne compacte pas la mémoire, ce qui permet un traitement rapide.
-
Collecteur générationnel et compactant de Java : Les GC JVM utilisent généralement des algorithmes de génération et de compactage, qui nécessitent un temps supplémentaire pour la réorganisation du tas.
Développements actuels
Cependant, les progrès récents dans les GC JVM répondent ces contraintes :
-
Pauseless Collector d'Azul : Azul propose un collecteur propriétaire qui atteint des temps de pause inférieurs à la milliseconde, même avec de gros tas.
-
Shenandoah d'OpenJDK et ZGC :Ces collecteurs utilisent des structures de données et des techniques qui réduisent considérablement les temps de pause.
-
Métronome d'IBM : Metronome vise à atteindre des temps de pause de l'ordre de la microseconde en dissociant le GC des threads mutateurs.
Compromis
Bien que les GC JVM puissent désormais approcher les temps de pause du GC de Go, ils impliquent souvent des compromis :
-
Complexité accrue : Les collecteurs susmentionnés introduisent une plus grande complexité dans la mise en œuvre du GC.
-
Débit inférieur : Les collecteurs non compactants peuvent sacrifier le débit par rapport à leurs homologues compacteurs.
-
Fragmentation de la mémoire :Le collecteur non compacté de Go peut entraîner une fragmentation de la mémoire, affectant potentiellement les performances au fil du temps.
Conclusion
Alors Les contraintes architecturales ont initialement empêché la JVM d'effectuer des pauses GC de type Go, des développements récents ont comblé cette lacune. Les GC JVM exploitent désormais des techniques qui réduisent considérablement les temps de pause, bien qu'ils puissent différer dans leurs caractéristiques de performances et leurs compromis par rapport au collecteur de Go.
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