It's not possible to scan CPU registers without stopping the thread, which requires an STW phase.
Some GCs (e.g. SGCL for C++) avoid scanning registers entirely, but doing so requires stronger guarantees when sharing data between mutator threads — such as using atomic types or other synchronization mechanisms. Java does not enforce such guarantees by default, so scanning registers (and thus a brief STW) remains necessary.