Sinon pour les langages particuliers on peut citer l'Objective-C puisque je suis dedans actuellement. Il n'a un GC que sur Mac (desktop).
Pour les autres plate-formes il a un système de comptage de références qui reste complexe à manipuler, mais beaucoup moins qu'en C pur. Par exemple:
Objet *o = [[Objet alloc] init]; // On a créé l'objet, refcount=1 [o release]; // Nous on a fini avec - le libère si le refcount passe à 0
Quelqu'un qui reçoit un objet et veut le garder peut faire un retain pour incrémenter le refcount.
Une addition qui rend le truc vraiment cool, c'est "l'autorelease pool", une liste d'objets à libérer "plus tard" (mais pas au hasard, comme en Java, à un moment soit déterminé par l'utilisateur, soit par le système lorsque le traitement est fini). Comme la règle est qu'on release tout objet qu'on a alloué soi-même (et seulement!), si on retourne un objet on peut l'inscrire dans l'autorelease comme ça il vivra encore un moment jusqu'à ce que l'appelant décide qu'en faire (soit retain - incrémente le refcount de sorte à ce que l'autorelease ne le libère pas, mais seulement lui quand il aura décidé de faire son release).