Your question implies that you are far away from having non-naive ideas about "garbage collector" setup.
All recent garbage collectors do have different properties; and they have a ton of settings that can be used to alter their behavior to achieve certain goals.
Meaning: it doesn't matter if G1 is slower. If you can tune it in a way that serves your application better than your current setup, it would be the choice you should make.
Long story short: you seem to be at a point where (garbage collection) performance of your application is a real issue. Then there is only one thing to do: start measuring. Understand what your code is doing; how it is doing that; and how that "interacts" with JIT and GC. Then identify goals towards you want to optimize; and start making experiments (where you, ideally, only change one single configuration change) to find JIT/GC tuning settings that move you towards that goal(s).
Example: maybe it would be enough to use G1; and give a "pause time goal" that works for you. But maybe you have to enable "gc tracing" for your JVM; to understand how much work the GC has to do for your application; and maybe maybe the answer would be to fix something in your code ... to simply generate less garbage.
Like in: there is not much point in tuning the GC; if your application is generating (avoidable) GBs of "garbage" every minute.