[llv-dev] How to understand the move "relocate objects directly reachable from running code" trying to do?

Hi all,

I’m investigating on integrating a gc to my llvm project, and when I read this document, one sentence confused me:

However, for a collector which wishes to relocate objects directly reachable from running code, a higher standard is required.

I don’t understand what the move “relocate objects directly reachable from running code” trying to do.

For my information, the concept “relocate” means the gc pointer refereed to a new location of an object, for example:

in Java:

Foo foo = new Foo();

foo = new Foo(); // ---> a relocation happens

So can anyone explain what the “relocate objects directly reachable from running code” trying to do?