-XX:+UnlockExperimentalVMOptions is a command to allow Java Virtual Machine settings that aren't fully supported by Sun. Since full support only means much for folk with a service contract, don't worry much about it. You /used/ to need it for Use1G1C, but I think it's unnecessary now.
-XX:+UseG1GC uses the Garbage-First Garbage Collector. It's a distinct way of clean unused objects from memory, that's supposed to be a little more parallel-processor friendly and reduce certain types of sudden bursts of CPU lock when cleaning large batches of memory simultaneously. It tends to do best when you've got a) large sections things that constantly stay in memory, and b) also have large sections of memory being cleared out -- which /should/ be better, but isn't always.
-XX:MaxGCPauseMillis= and -XX:GCPauseIntervalMillis= have to do with how often Java will try to clear unused memory, and how long it can spend at once looking at memory for cleanup. The exacts are beyond the scope of this thread, but suffice to say that lower numbers should reduce garbage-collection related stuttering, at the cost of memory and CPU time (and GCPauseIntervalMillis should always be at least two or three times MaxGCPause).
-XX: PermSize= and -XX:MaxPermSize= sets the default and maximum amount of permanently generated memory, respectively, mostly used for saving method calls. The maximum without the flag may be anywhere from 32-96 MB, but very large programs can need more than that. ((It's also not unusual to have memory leaks in PermGen memory -- MaxPermSize won't fix that, but it'll delay it long enough that it may not be an issue.)) Setting the PermSize assigns the memory early, which can avoid some minor delays latter.
-XX:+AggressiveOpts does some internal Java optimization stuff that hasn't been fully tested. This /can/ cause crashes or unpredictable results, but can be worth a shot.