Always look at the memory management story when you stumble upon something like this.
* malloc/free (ref counting GC)
* memory pooling (no heap, stack-based for memory constrained systems)
* third party allocators
* third party GC
Details here: http://ferret-lang.org/#sec-4-2
I didn't find anything on cycles in the linked page, maybe the problem is not relevant in most real-world clojure code?