Un ramasse-miettes (anglais : garbage collector) est une routine dans la bibliothèque d'exécution (anglais : runtime library) d'un langage de programmation employant la gestion automatique de la mémoire. Un tel langage permet bien sûr d'allouer de nouveaux objets, mais il n'y a pas de moyen de libérer la mémoire allouée par un objet. C'est le rôle du ramasse-miettes.
Le ramasse-miettes fait son travail en balayant la mémoire entière régulièrement pour déterminer quels objets sont vivants (un objet est vivant s'il est possible pour un programme d'y obtenir une référence), et pour libérer la mémoire occupée par les autres.
La plupart des langages de programmation modernes (Lisp, Java, C#, Ruby, etc) utilisent la gestion automatique de la mémoire, car il est connu que le fait qu'un objet soit vivant est une propriété globale et donc non modulaire. Avec un langage sans ce type de gestion de la mémoire, il est par conséquent extrêmement difficile d'écrire un programme qui soit simultanément modulaire, correct, et sans fuites de mémoire