The Xms flag dates from a time before the JVM had incremental garbage collection, and so it was beneficial to keep the heap as small as it could be (to keep garbage collections as short as possible). So you would reserve an appropriate maximum amount of memory at startup with the Xmx flag, but only commit a smaller chunk with Xms.
Now we have generational, incremental garbage collectors, it is often optimal to set Xms and Xmx to the same value. This avoids the need to dynamically allocate more memory to the heap, which requires a full garbage collection that can affect performance negatively.
If you start your application with a low value for Xms and turn on GC logging (-verbose:gc -Xloggc:FILENAME) the log file will show how the heap and generation sizes change as the application runs and give you an idea of how much memory your app will actually need.
t have to do always the memory check and allocated extra memory and take memory out when it doesnt need it. So since there are less checks it should be more performant since the memory is allocated ( at least a min ). Let me know if I am wrongVisualVM