The bottom line is that reference counting is normally not used because of its inability to reclaim cycles. Via object tags, or separate bitmaps. Pass over the whole heap, and add unmarked objects to the free-list . When objects are deallocated, it may not be possible to merge them together into larger chunks. Hence, when new allocations occur, it may not be possible to reuse old memory.
Collection cost is proportional to the size of the heap.
Since objects are never moved, the remain in place after sweep. New objects are then allocated between old objects. This places objects of varying ages in the same page. This degrades spatial locality. Also, in a virtual memory system, a program may use many memory pages.