Indeed. Memory usage is a point I never addressed in my comment. When managing large Java applications, that is indeed one of the most important issues that one has to be aware of. Some runtimes tries to be more automatic than others, and there are books worth discussions to be had about that.
As for the second paragraph, thank you for clarifying that. I used poor terminology. I should probable have said pointer sharing, or copying.
For ownership transfer to be zero cost, the compiler have to be clever enough to figure out that the original reference isn't used after copy. This can be handled by the compiler itself, or be enforced by the language (as is the case with Rust, as far as I understand).
Ref counting uses additional memory to store the refcounts. And possibly more for the suspected set of the cycle collector.
GC uses additional memory to amortize collections over allocations. (Zero overhead means constantly collecting, using 2x steady state memory size is not uncommon.)
Overall, I think you're right, refcounting comes out ahead on memory usage. But it's not completely straightforward to determine.
(Also, "ownership transfer" can be free in reference counting, since the number of references is the same before and after so there's no need to modify the reference count. What isn't free is sharing ownership, since it needs reference count manipulation.)