Start here. This is the direct spoken answer to practice first.
Why this question matters
High GC CPU usually reflects the volume, size, or lifetime of application allocations rather than a collector defect. Allocation profiles, generation counts, heap size, traffic, and endpoint traces identify which work is creating the pressure.
I would first confirm that GC is actually using the CPU, then look at allocation rate, collection counts, heap size, and request traffic. High GC CPU often means the app is allocating too much too quickly. I would profile top allocating paths and check recent changes. Then I would reduce allocations where they matter: fewer intermediate objects, better query projection, streaming large data, or lower concurrency for heavy operations.