-server: Auf servern bzw. bei 64bit Java ohne Funktion
-d64: Auf allen Plattformen außer Solaris ohne Funktion, unter Solaris würde -server automatisch durch -d64 aktiviert
GC:
-Xincgc: Keine kompletten GCs, immer nur Teile des Speichers freiräumen bis ein Timeout erreicht wird. Verhindert theoretisch Lags, wenn aber mehr Speicher angefordert wird als in den Pausen freigeräumt werden kann läuft er irgendwann voll, und es kommt zu nem FullGC, der den Server bei 8GB gerne mal für 5-10 Sekunden einfrieren lässt. Nicht MultiThreaded, d.h. auf 4 Kernen und mehr langsamer UND ineffizienter.
-XX:+UseParallelGC: MultiThreaded GC für die YoungGen, normaler GC für die OldGen.
-XX:+UseConcMarkSweepGC: Normaler GC für die YG, MT GC für die OG.
-XX:+UseParNewGC: "Neuer" paralleler GC, der für beide Generationen MT benutzt.
Man darf nur genau eine der GC Optionen nutzen, alles andere führt zu undefiniertem Verhalten. Der ParNewGC sollte der beste sein und sollte seit Java7 auch standardmäßig aktiviert sein, allerdings bin ich da grad nicht sicher. Nochmal angeben kann aber nicht schaden.
Mit -verbose:gc kann man sich in der Konsole anzeigen lassen, wie oft der GC läuft, wie viel er dabei freiräumt und wie lange der Server dafür eingefroren werden musste.
Ach und als Server OS empfehle ich auch Linux, und zwar ohne GUI.