Lorsque le CPG entre et sort des objets de Young (à S0 ou S1), les objets morts ne sont pas copiés et donc jetés. Les objets sont déplacés un certain nombre de fois entre S0 et S1 jusqu'à ce qu'ils meurent ou qu'ils deviennent assez vieux pour être transférés dans l'Ancien. S0 et S1 est l'espace de stockage entre les espaces Young (Eden) et Old.
Le GC fonctionne si longtemps qu'il y a des objets à copier, jetant tous ceux qui sont morts. Le GC complet est exécuté lorsque la mémoire a réellement besoin d'être récupérée, les exemples d'objets doivent être supprimés de l'ancien espace. Le moyen le plus rapide de nettoyer l'espace des jeunes est d'attendre que la plupart des objets soient morts, car vous n'avez pas besoin de copier autant d'objets vers S0 | S1 et plus tard vers Vieux.
Remplir la mémoire, puis prendre la pénalité d'un cycle GC plus long est en fait plus efficace que de laisser le GC s'exécuter avec des intervalles très courts. C'est pourquoi vous voyez votre mémoire grandir et grandir jusqu'à ce qu'elle soit presque pleine, et puis tout retombe à presque rien à nouveau.
Un GC complet est StopTheWorld c'est nécessaire pour réorganiser les objets sur le tas dans l'ancien espace, il n'est pas nécessaire dans l'espace jeune. Si l'espace jeune devient plein, les objets rapides peuvent être promus à l'Ancien. Ce n'est pas un bon cas et c'est le cas auquel vous songez.
Pour éviter les GC complets, vous pouvez calculer la quantité de mémoire dont vous aurez besoin dans Young Space avec le taux de création dont vous disposez pour vous assurer que les objets ne sont pas promus avant d'être nécessaires.Il est également possible de régler la taille de l'espace S0 et S1 et le nombre de fois où les objets rebondiront entre eux avant qu'ils ne se retrouvent dans l'espace ancien (nécessitant un GC complet à supprimer).
Un bon lien, mais un peu vieux est celui-ci sur Tuning Garbage Collection