I just looked at Boehm and according to this [SO post](https://stackoverflow.com/questions/4796379/how-does-boehm-gc-work-for-c-program), it doesn't perform any compaction or reference moving (although the Wikipedia page said that it can if integrated fully).
I do realize that the binary trees benchmark is kind of a worse-case scenario for the ARC/ORC approach, and that there are ways to make it much faster, but I thought that having a Java-like GC with Nim's use of value types would be even better since you can still get the advantage of value types with the advantages of a high throughput GC for batch processing. I was looking at Rust a while back and I think it introduced a `Pin` concept to ensure that memory doesn't move for cases of C interfacing like you described. I'll look at Nim's source code a little bit more, but it doesn't look like it setup for moving references at all. If I feel particularly motivated maybe I'll try to modify it and experiment :) Thanks for your response!