Question can be a bit like asking how long to make a piece of string.
I would like to recommend enabling some monitoring via traditional Java logging to a file or use JMX (java management extensions) with JDK (java developer kit) tools like jconsole or jmc (java mission control)
to know how well the heap and non heap are performing.
Some thoughts about making adjustments.
Since your current Xms Xmx settings are not giving you grief perhaps leave those for now.
Some folks recommend setting to the Xms Xmx values the same and many times I agree.
Consider adjusting Metaspace to a higher value than default setting CF11 provides of MaxMetasize=192M. Defining an initial value to Metaspace can be helpful. With more memory available higher values might suit better.
EG -XX:MetaspaceSize=312m -XX:MaxMetaspaceSize=512m
Perhaps define a value to CodeCache so it can grow more than the 240Mb you get when not defined.
New generation made up of Eden and Survivor spaces might not be performing well even tho
you have large Xms Xmx settings. One can do well to define some tuning for NewGen.
EG -XX:NewSize=4096m -XX:MaxNewSize=4096m -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90
Does -XX:CompressedClassSpaceSize= value need applying. JMX will help to know.
Define more threads for the -XX:+UseParallelGC garbage collector defined
Define some limits for growth and shrink of heap.
EG -XX:MinHeapFreeRatio=40 -XX:MaxHeapFreeRatio=70
Something a bit more leading edge use a different garbage collector.
EG -XX:+UseG1GC (Java reminder you would not define -XX:+UseParallelGC)