After reading already asked question on the subject and a lot of googling I am still not able to have a clear view of -Xms option
My question is: what's the difference between java -Xms=512m -Xmx=512m
and java -Xms=64m -Xmx=512m
?
For now I have the following answer:
The only difference is in the number of garbage collections that will be run during my application's run and the number of memory allocations. Am I right ?
Here are my reasons for this answer:
Setting the -Xms
option to 512m
doesn't result in my application using really 512M
of physical memory after startup. I guess this is related to modern OS virtual memory management and lazy pages allocations. (I noticed that setting -Xms
to 512M
or to 64M
doesn't change at all the initial used memory reported either by top on Linux or by the task manager on windows)
Can someone help me to understand the impact of this Xms
option or point me to links that will help me to understand it?
To summarize the information found after the link: The JVM allocates the amount specified by -Xms but the OS usually does not allocate real pages until they are needed. So the JVM allocates virtual memory as specified by Xms but only allocates physical memory as is needed.
You can see this by using Process Explorer by Sysinternals instead of task manager on windows.
So there is a real difference between using -Xms64M and -Xms512M. But I think the most important difference is the one you already pointed out: the garbage collector will run more often if you really need the 512MB but only started with 64MB.