Java's ZGC and Shenandoah collectors suspend threads only briefly -- less than one millisecond regardless of the heap size.
How come more languages doesn't implement non-halting GC?
The garbage collector must lock threads if it is compacting or does not create separate stacks for pointers only. All GCs for Java a lock application threads.