Your GC log shows a stop-the-world pause far longer than the collection work inside it. Where did the rest of the time go?
Most likely into reaching the safepoint. Every application thread has to arrive at a poll point before the operation can begin, and one late thread stalls all of them, so the pause is time-to-safepoint plus the actual work. Safepoint logging separates the two.