jvm setting的参数确实比较多(Oracle官网Java HotSpot VM Options),但是作为一名java开发者,那几个最常用最基本的参数设置和意义一定要死记和理解。这里推荐一个网站http://jvmmemory.com/在上面你可以方便的设置jvm的参数(当然这个网站上也是有些错误的,最可靠的还是去查下Oracle的文档)。
Notice
:这里我们默认以Linux JAVA8 hotspot环境为例,其Oracle官网Java Platform, Standard Edition Tools Reference(这里面有详细参数配置说明)。
下面给出14个最常用和最基本的内存配置参数。
参数 | 等同于 |
---|---|
-Xss1024k | -XX:ThreadStackSize=1024k |
-Xms512m | |
-Xmx1024m | -XX:MaxHeapSize=1024m |
-Xmn512m | |
-XX:NewSize=512m | |
-XX:MaxNewSize=512m | |
-XX:NewRatio=8 | |
-XX:SurvivorRatio=32 | |
-XX:MinHeapFreeRatio=40 | |
-XX:MaxHeapFreeRatio=70 | |
-XX:MetaspaceSize=128m | |
-XX:MaxMetaspaceSize=256m |
首先我们来看看jvm内存模型结构,这里不详细叙述,我用一张图来让你过目不忘(jvisualvm visualGC插件,下图并非以上jvm参数设置,只是为了方便对jvm内存模型记忆)。当然了,这张图死磕也要永久记住的,有了他我们记忆以上几个参数不再是难事,时间久了也不会感觉陌生或者忘记。
一个重要的概念就是我们常常所说的设置jvm的内存参数大多关注的是堆内存的大小,你可以简单理解成这样:堆内存 = Old + Eden + S0 + S1
;年轻的 = Eden(新生代) + S0 + S1
。
老年代内存:年轻代内存=8:1 => 老年代占堆内存的8/9;年轻代占堆内存的1/9
。存活区:新生代=1:8 =》新生代占年轻代的8/10,每个存活区各占年轻代的1/10
。以上就是14个参数,为了深刻理解,建议本地配置让后观察内存大小变化(可以使用jmap -heap pid 或者 visualGC来帮助观察)验证自己的理解是否正确。