Question

Un typique collecteur de déchets générationnel Maintient les données récemment allouées dans une région de mémoire distincte. Dans les programmes typiques, de nombreuses données sont de courte durée, donc la collecte de jeunes ordures (un cycle GC mineur) et la collecte de vieilles ordures sont rarement un bon compromis entre les frais généraux de mémoire et le temps passé à faire GC.

Intuitivement, le bénéfice d'un collecteur de déchets générationnel par rapport à un collecteur de régions uniques devrait augmenter à mesure que le rapport de latence de la mémoire principale par rapport au cache augmente, car les données de la région jeune sont accessibles souvent et maintenaient tout en un seul endroit. Les résultats expérimentaux corroborent-ils cette intuition?

Était-ce utile?

La solution

Voici quelques articles qui parlent des implications en cache des collectionneurs de déchets générationnels:

D'après ce que je peux recueillir, le principal problème est que les systèmes collectés à des ordures échangent de l'espace en mémoire pour éviter la collecte avant. La même chose s'applique à la mémoire de cache. Comme vous l'avez suggéré, les choses de la première génération seront très probablement assises dans le cache, et donc leur allocation et leur collection seront beaucoup plus rapides que quelque chose dans la mémoire principale, ou se sont déroulées sur le disque. Le principal problème est la taille de la première génération par rapport à la taille de votre cache. Si votre cache se remplit avant la première génération, vous commencez à perdre ces avantages au fur et à mesure que les missages commencent à s'accumuler.

Autres conseils

Il y a un aspect très délicat de tous les collectionneurs d'ordures qui pourraient être sous-jacents dans certaines descriptions, et c'est le "scan complet" ou "collection complète". Périodiquement, au hasard, par intermittence, ils doivent scanner tous les objets. Les collectionneurs générationnels sont meilleurs pour reporter le scan complet et minimiser sa durée, mais il est toujours nécessaire.

Le collectionneur générationnel se concentrera sur ce qu'on appelle parfois l'espace "pépinière", mais il devra finalement / inévitablement à collecter sur l'espace de génération "plus ancien", provoquant une analyse complète de mémoire.

Cette analyse complète est incompatible avec presque toutes les caches de mémoire et (en particulier!) Les schémas de virtualisation dans le sens où presque tous les schémas de mise en cache / virtualisation de la mémoire devront / devraient échouer dans toute amélioration des performances dans ce cas.

Ainsi, la réponse clé à cette question est de la fréquence à laquelle le scan complet est déclenché et à quel point son effet est "mauvais" lorsqu'il se produit et s'il peut être toléré. Cela se résume à une propriété / question dépendante de l'application.

En d'autres termes, pour «la plupart» du fonctionnement du collectionneur, un cache l'aidera probablement (le cache et le «jeune» espace de pépinière se chevauchent généralement!), Mais il y a un périodique, intermittent, éventuel, inévitable, lourd, Peut-être même que même «massif» [dégradant] pic de performance lorsque l'espace «ancienne génération» est complet et que le cache «taux de succès» se dégradera en très mauvais, car de nombreux objets en dehors de celui-ci sont tous récupérés dans une boucle serrée par le plein Cycle de numérisation / collecter. En d'autres termes, une discontinuité périodique incontournable (où les estimations statistiques / moyennes / tendances des performances, etc. sont trompeuses et inapplicables).

Ce qui émerge maintenant, ce sont de nouveaux systèmes de collecte conçus pour s'associer avec les systèmes de gestion de la mémoire sous-jacents (mise en cache / virtualisation). Il semble que les approches historiques qui découplent complètement les systèmes distincts de collecte, de mise en cache et de virtualisation ne fonctionneront pas ainsi que les approches qui combinent / intégrer / aborder les trois aspects ensemble.

Voir par exemple Cache conscient de la collecte des ordures par Zhou et Demsky.

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top