Un ramasse-miettes générationnel typique conserve les données récemment allouées dans une région de mémoire distincte. Dans le cadre de programmes classiques, de nombreuses données sont de courte durée. Par conséquent, la collecte fréquente de jeunes déchets (un cycle mineur de GC) et la collecte de vieux déchets peu fréquente constituent un bon compromis entre la surcharge de mémoire et le temps passé à effectuer la GC.
Intuitivement, l'avantage d'un récupérateur de déchets générationnel par rapport à un collecteur à une seule région devrait augmenter à mesure que le rapport de latence de la mémoire principale par rapport au cache augmente, car les données de la jeune région sont souvent consultées et conservées au même endroit. Les résultats expérimentaux corroborent-ils cette intuition?
la source
Réponses:
Voici quelques articles qui traitent des implications en cache des éboueurs générationnels:
D'après ce que je peux comprendre, le principal problème est que les systèmes ramassés par les ordures ménagent de l'espace en mémoire pour éviter une collecte en amont. La même chose s'applique à la mémoire cache. Comme vous l'avez suggéré, les éléments de la première génération seront probablement conservés dans le cache. Leur affectation et leur collecte seront donc beaucoup plus rapides que celles stockées dans la mémoire principale ou transférées vers le disque. Le problème principal 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 erreurs s'accumulent.
la source
Il existe un aspect très délicat de tous les éboueurs que certaines descriptions pourraient passer sous silence: il s'agit de "l'analyse complète" ou de "la collecte complète". Périodiquement, au hasard, par intermittence, ils doivent scanner tous les objets. les collecteurs de génération sont plus aptes à reporter l'analyse complète et à en minimiser la durée, mais cela reste nécessaire.
Le collectionneur générationnel se concentrera sur ce que l’on appelle parfois l’espace «pépinière», mais il devra éventuellement / inévitablement s’amasser sur l’espace «ancien», générant ainsi un balayage complet de la mémoire.
Cette analyse complète est incompatible avec la quasi-totalité des systèmes de mise en cache de la mémoire et (en particulier!) Des schémas de virtualisation, en ce sens que presque tous les systèmes de mise en cache / de virtualisation de la mémoire échoueront / devront échouer lors de toute amélioration des performances dans ce cas.
La réponse clé à cette question est donc de savoir à quelle fréquence l'analyse complète est déclenchée et quelle est la gravité de ses effets lorsqu'elle se produit, et si elle peut être tolérée. cela revient à une propriété / question dépendante de l'application.
En d'autres termes, pour "la plupart" des opérations du collecteur, une cache l'aidera probablement (la cache et le "jeune" espace de la pépinière se chevaucheront généralement!), Mais il existe une périodicité, intermittente, éventuelle, inévitable, lourde, peut-être même une "augmentation massive" [dégradante] des performances lorsque l’espace "ancienne génération" est entièrement collecté et que le "taux de réussite" du cache se dégrade en très mauvais état étant donné que de nombreux objets en dehors de celui-ci sont tous récupérés dans une boucle étroite cycle de balayage / collecte. En d’autres termes, une discontinuité périodique inévitable (où estimations statistiques / moyennes / tendances de la performance, etc. sont trompeuses et inapplicables).
De nouveaux systèmes de collecte conçus pour s’intégrer aux systèmes de gestion de la mémoire sous-jacents (mise en cache / virtualisation) émergent. Il semble en effet que les approches historiques qui découplent complètement les systèmes distincts de collecte de mémoire, de mise en cache et de virtualisation ne fonctionneront pas aussi bien que les approches combinant / intégrant / traitant les trois aspects ensemble.
Voir, par exemple, la collecte de déchets sensible au cache par Zhou et Demsky.
la source