The biggest performance problem with automatic reference counting is that it requires atomic reference counting and&#x2F;or type system separation of thread-local and shared data. In a sufficiently multicore scenario the overhead of atomic reference counting becomes unacceptable. If you want to reduce the number of atomic operations you have to do deferred reference counting, which destroys many of the benefits of reference counting, e.g. you can no longer run destructors in a predictable way and have to use GC finalizer semantics.<p>There is a possibility that better whole-program optimization (potentially combined with annotations for function parameters) can reduce this overhead, but it&#x27;s a bit of an unknown.