JVM 内存配置参数

一个重要的概念就是我们常常所说的设置jvm的内存参数大多关注的是堆内存的大小。
简单理解成这样:堆内存 = Old + Eden + S0 + S1 ;年轻的 = Eden(新生代) + S0 + S1 。

栈内存大小相关设置
-Xss1024k
意义: 设置线程栈占用内存大小。
默认值:不同的操作系统平台,其默认值不同。

堆内存大小相关设置

-Xms512m
意义: 设置堆内存初始值大小。
默认值:如果未设置,初始值将是老年代和年轻代分配制内存之和。

-Xmx1024m
意义: 设置堆内存最大值。
默认值:不同的操作系统平台,其默认值不同, 具体请查看官网 或者 查看讨论 How is the default Java heap size determined?
年轻代内存大小相关设置

-Xmn512m
意义: 设置新生代的初始值及最大值。
默认值:堆内存的1/4(这里要记住不是最大堆内存,还是已经分配的堆内存的1/4)。

-XX:NewSize=512m
意义:设置新生代的初始值。

-XX:MaxNewSize=512m
意义:设置新生代的最大值。

比率方式设置

-XX:NewRatio=8
意义:设置老年代和年轻代的比例。比如:-XX:NewRatio=8 表示老年代内存:年轻代内存=8:1 => 老年代占堆内存的8/9,年轻代占堆内存的1/9。
默认值:2

-XX:SurvivorRatio=32
意义:设置新生代和存活区的比例(这里需要注意的是存活区指的是其中一个)。比如:-XX:SurvivorRatio=8 表示存活区:新生代=1:8 => 新生代占年轻代的8/10,每个存活区各占年轻代的1/10。
默认值:8

-XX:MinHeapFreeRatio=40
意义:GC后,如果发现空闲堆内存占到整个预估上限值的40%,则增大上限值。
默认值:40

-XX:MaxHeapFreeRatio=70
意义:GC后,如果发现空闲堆内存占到整个预估上限值的70%,则收缩预估上限值。
默认值:70

Meta大小相关设置

-XX:MetaspaceSize=128m
意义:初始元空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
默认值:依赖平台

-XX:MaxMetaspaceSize=256m
意义:设置元空间的最大值,默认是没有上限的,也就是说你的系统内存上限是多少它就是多少
默认值:默认没有上限,在技术上,Metaspace的尺寸可以增长到交换空间

参考链接

Java HotSpot VM Options

Java Platform, Standard Edition Tools Reference