Xms与InitialHeapSize
- Xms和lnitialHeapSize是等价的,都是设置堆的最小值,比如设置
-Xms100M
和-XX:InitialHeapSize=100M
都是设置堆的初始化大小值为100M,同时也是堆的最小值为100M - 那么这个Heap的最小值的设定的意义,即JVM进行GC垃圾回收时,会对Heap进行清理,会对Heap的内存进行缩容的操作,那么缩容最小是缩到多小,这个值就是缩容可以缩到的最小内存值。
Xmx与MaxHeapSize
- Xmx和MaxHeapSize是等价的,都是设置堆的最大值,比如
-Xmx100M
和-XX:MaxHeapSize=100M
都是设置堆的最大值为100M
-
MaxHeapSize不能比lnitialHeapSize小,如果小的话,进程会起不来
-
InitialHeapSize必须不小于1M
-
HeapSize是512K对齐的,也就是如果你设置的大小,并不是512K的整数倍,
那么将会取比你设置的值要大的512K的最小公倍数 -
Xms与InitialHeapSize表示的含义是相同的,但是这两个参数如果同时设置,那么生效的只有最后设置的参数(Xmx与MaxHeapSize同理)
Heap的缺省配置
client模式下,JVM初始和最大堆大小为:
- 在物理内存达到192MB之前,JVM最大堆大小为物理内存的一半,否则,在物理内存大于192MB,在到达1GB之前,JVM最大堆大小为物理内存的1/4,大于1GB的物理内存也按1GB计算。
- 举个例子,如果你的电脑内存是128MB,那么最大堆大小就是64MB,如果你的物理内存大于或等于1GB,那么最大堆大小为256MB。
- Java初始堆大小是物理内存的1/64,但最小是8MB。
server模式下:
与client模式类似,区别就是默认值可以更大,比如在32位JVM下,如果物理内存在4G或更高,最大堆大小可以提升至1GB,如果是在64位JVM下,如果物理内存在128GB或更高,最大堆大小可以提升至32GB。