Java maintains objects in two heaps. An young generation heap, and objects that survive in that get moved to an old generation heap. As Java is a garbage collected language, a garbage collector is responsible for clearing unused objects out of these heaps (and for moving objects that are surviving for a long time from the new, to the old generation heap).
Because garbage collection (GC) is an inferior technology (not actually, but I have used enough c++ to develop an unhealthy sense of superiority
) there is not clear "best" garbage collection algorithm - so Java has several different GC implementations available. The default GC that Java uses for the old generation heap offers the best "overall" performance, but runs on a single thread, so locks that one thread for longer periods. "+UseConcMarkSweepGC" implies another flag "+UseParNewGC" - with together for the old and new generation heaps - enable concurrent (multi threaded) garbage collectors that uses more cpu cores (threads) to finish its work faster. With sufficient cores this algorithm - with minecrafts memory load - can complete its work in less than 50ms, and so garbage collection does not impact the servers tps. Without it, each time the server garbage collects you will get a warning message "Server took xxxms, skipping yy ticks" with accompanying block lag.
I'm not sure what DisableExplicitGC does, other than disabling any explicit attempts by the minecraft code to force a garbage collection cycle - which seems a bad idea actually as Mojang would only have done that to improve performance.