concurrent root iterator
// Marking
bool is_object_live(uintptr_t addr) const;
bool is_object_strongly_live(uintptr_t addr) const;
template <bool finalizable, bool publish> void mark_object(uintptr_t addr);
void mark_start();
+ void mark_concurrent_roots();
void mark();
void mark_flush_and_free(Thread* thread);
bool mark_end();
// Post-marking & Pre-relocation