I've seen high throughput apps doing 45 second "stop the world" garbage collection cycles because of high disk I/O and enabled GC logging (the process just sat there waiting for some I/O time to flush the GC log file).
So in theory tuning GC isn't thaaaaaat complicated. In practice however I've seen horrible things :(