Pánové, já vás nechápu...proč se koukám na jazyk D? Sem zvědavý. Ano, vým, jde vytvořit gc bez freeznuti (reference counting). Ma však několik vad, třeba cyklicke datove struktury (jež se neuvolní). D má nějaký derivat mark and sweep (netuším jak maj přesně resenou fragmentaci). Takže, prosím, nenapadat me znalosti, pouze sem chtěl začít debatu. Pozoruji totiž že nabírá D na síle.
I pri pocitani referenci bude muset GC zastavit aktivni vlakna, rozdil je jen v tom, ze nemusi udelat STW pri oznacovani zivych/nezivych objektu. STW chovani lze omezit, napriklad tak, ze se vlakna zastavuji postupne, coz ale pro RT aplikaci je stejne spatne jako SWT 
Při počítání referencí se jen atomicky sníží čítač referencí. Ostatních vláken se to nedotkne, pokud nesahají na stejný čítač.
Muze byt u jednoducheho objektu, ale uz u takoveho seznamu (kde si program udrzoval pouze referenci na HEAD/CAR) je to slozitejsi operace, a samotna atomicita muze znamenat nutnost locku nebo alespon CAS operaci. Navic se pojmem "reference counting" muze oznacovat nekolik ruznych technologii, muze to byt klidne spojeno s generacnimi GC, v nichz dochazi k presunum objektu na heapu (ale to jsme asi oba dva nemeli na mysli, navic to je spis problematika managovanych jazyku, v nichz neexistuje manipulace s primymi ukazateli).
Jistě, u složitějších datových struktur může být zamykání komplikovanější, nicméně často je "konkurenční" chování efektivnější než kdyby se zastavila všechna vlákna. Navíc konkrétně v Cocoa se typicky provádí RC jen na hlavním vlákně (main loop), protože i callbacky na něm běží, a zbytek používá manuální správu paměti. Ale to už jsem odbočil.