ну так, ACR в прямом смысле считает ссылки и вставляет соответствующие команды на уровне компиляции - свободить ресурс, если в этом месте количество ссылок на него равно 0
GC делает тоже самое, но недетерминированно, а для этого ему соответственно нужен отдельный поток, который все это процессит в бекграунде