> more predictable runtime performance
Not really, reference counting can cause a single object deallocation to trigger an arbitrarily long chain of deallocations.
Yes but then you can move your deallocation out of the critical path
Variable time yes but you know when you're going to pay it
(I mean yes you can put your gc.run() there as well, but it might not give you the results you want)
Immediate reclamation, yes. There do exist a number of reference-allocation algorithms that performs deferred reclamation similar to how tracing GC does.