Erlang also has reference counters for things like strings that are immutable and can be shared between threads (processes in Erlang).
Overall this is a good model. Use GC for small per green thread heaps. Then use reference counters for shared immutable structures that cannot form cycles and copy everything else.