It's not really that bad. And on the plus side, VisualVM helps a ton because you can connect to a running JVM and actually see what's happening with the garbage collector (among other things).
So in theory tuning GC isn't thaaaaaat complicated. In practice however I've seen horrible things :(