对于初识jvm启动参数的人来说,-xms(堆的最小值) -xmx(堆的最大值) 的概念是很容易感到困惑的。这里,我总结了几点:
1、-xms有什么用处
答:如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,直到挖到-xmx的限制为止,所以totalMemory()是慢慢增大的。如果用了-Xms参数,程序在启动的时候就会无条件的先从操作系统中申请-Xms定义的内存大小,等不够了之后,再去挖。
2、-Xms和-Xmx设置相同时可避免Java堆自动扩展
3、-Xmx指定内存虽然不会再程序启动的时候直接分配,但是会被保留起来,内存保留 != 内存分配。当本机内存被保留时,无法使用物理内存或其他存储器作为备用内存。尽管保留地址空间块不会耗尽物理资源,但会阻止内存被用于其他用途。由保留从未使用的内存导致的泄漏与泄漏分配的内存一样严重。
参考博文:
https://my.oschina.net/cjun/blog/511617
http://www.cnblogs.com/orientsun/archive/2012/07/25/2608538.html