一定要记住的14个JVM内存配置参数
jvm setting的參數(shù)確實(shí)比較多(Oracle官網(wǎng)Java HotSpot VM Options),但是作為一名java開(kāi)發(fā)者,那幾個(gè)最常用最基本的參數(shù)設(shè)置和意義一定要死記和理解。這里推薦一個(gè)網(wǎng)站http://jvmmemory.com/在上面你可以方便的設(shè)置jvm的參數(shù)(當(dāng)然這個(gè)網(wǎng)站上也是有些錯(cuò)誤的,最可靠的還是去查下Oracle的文檔)。
Notice:這里我們默認(rèn)以Linux JAVA8 hotspot環(huán)境為例,其Oracle官網(wǎng)Java Platform, Standard Edition Tools Reference(這里面有詳細(xì)參數(shù)配置說(shuō)明)。
下面給出14個(gè)最常用和最基本的內(nèi)存配置參數(shù)。
|
參數(shù) |
等同于 |
|---|---|
|
-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 |
首先我們來(lái)看看jvm內(nèi)存模型結(jié)構(gòu),這里不詳細(xì)敘述,我用一張圖來(lái)讓你過(guò)目不忘(jvisualvm visualGC插件,下圖并非以上jvm參數(shù)設(shè)置,只是為了方便對(duì)jvm內(nèi)存模型記憶)。當(dāng)然了,這張圖死磕也要永久記住的,有了他我們記憶以上幾個(gè)參數(shù)不再是難事,時(shí)間久了也不會(huì)感覺(jué)陌生或者忘記。
一個(gè)重要的概念就是我們常常所說(shuō)的設(shè)置jvm的內(nèi)存參數(shù)大多關(guān)注的是堆內(nèi)存的大小,你可以簡(jiǎn)單理解成這樣:堆內(nèi)存 = Old + Eden + S0 + S1 ;年輕的 = Eden(新生代) + S0 + S1 。
棧內(nèi)存大小相關(guān)設(shè)置
-Xss1024k
意義: 設(shè)置線程棧占用內(nèi)存大小。
默認(rèn)值:不同的操作系統(tǒng)平臺(tái),其默認(rèn)值不同,具體看官網(wǎng)說(shuō)明。
堆內(nèi)存大小相關(guān)設(shè)置
-Xms512m
意義: 設(shè)置堆內(nèi)存初始值大小。
默認(rèn)值:如果未設(shè)置,初始值將是老年代和年輕代分配制內(nèi)存之和。
-Xmx1024m
意義: 設(shè)置堆內(nèi)存最大值。
默認(rèn)值:default value is chosen at runtime based on system configuration,具體請(qǐng)查看官網(wǎng)或者查看討論How is the default Java heap size determined?。
年輕代內(nèi)存大小相關(guān)設(shè)置
-Xmn512m
意義: 設(shè)置新生代的初始值及最大值。
默認(rèn)值:堆內(nèi)存的1/4(這里要記住不是最大堆內(nèi)存,還是已經(jīng)分配的堆內(nèi)存的1/4)。
-XX:NewSize=512m
意義:設(shè)置新生代的初始值。
-XX:MaxNewSize=512m
意義:設(shè)置新生代的最大值。
比率方式設(shè)置
-XX:NewRatio=8
意義:設(shè)置老年代和年輕代的比例。比如:-XX:NewRatio=8 表示老年代內(nèi)存:年輕代內(nèi)存=8:1 => 老年代占堆內(nèi)存的8/9;年輕代占堆內(nèi)存的1/9。
默認(rèn)值:2 。
-XX:SurvivorRatio=32
意義:設(shè)置新生代和存活區(qū)的比例(這里需要注意的是存活區(qū)指的是其中一個(gè))。比如:-XX:SurvivorRatio=8 表示存活區(qū):新生代=1:8 =》新生代占年輕代的8/10,每個(gè)存活區(qū)各占年輕代的1/10。
默認(rèn)值:8 。
-XX:MinHeapFreeRatio=40
意義:GC后,如果發(fā)現(xiàn)空閑堆內(nèi)存占到整個(gè)預(yù)估上限值的40%,則增大上限值。
默認(rèn)值:40 。
-XX:MaxHeapFreeRatio=70
意義:GC后,如果發(fā)現(xiàn)空閑堆內(nèi)存占到整個(gè)預(yù)估上限值的70%,則收縮預(yù)估上限值。
默認(rèn)值:70。
Meta大小相關(guān)設(shè)置
-XX:MetaspaceSize=128m
意義:初始元空間大小,達(dá)到該值就會(huì)觸發(fā)垃圾收集進(jìn)行類(lèi)型卸載,同時(shí)GC會(huì)對(duì)該值進(jìn)行調(diào)整:如果釋放了大量的空間,就適當(dāng)降低該值;如果釋放了很少的空間,那么在不超過(guò)MaxMetaspaceSize時(shí),適當(dāng)提高該值。
默認(rèn)值:依賴平臺(tái)。
-XX:MaxMetaspaceSize=256m
意義:設(shè)置元空間的最大值,默認(rèn)是沒(méi)有上限的,也就是說(shuō)你的系統(tǒng)內(nèi)存上限是多少它就是多少。
默認(rèn)值:默認(rèn)沒(méi)有上限,在技術(shù)上,Metaspace的尺寸可以增長(zhǎng)到交換空間。
以上就是14個(gè)參數(shù),為了深刻理解,建議本地配置讓后觀察內(nèi)存大小變化(可以使用jmap -heap pid 或者 visualGC來(lái)幫助觀察)驗(yàn)證自己的理解是否正確。
總結(jié)
以上是生活随笔為你收集整理的一定要记住的14个JVM内存配置参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 阐述:SIP协议是什么
- 下一篇: Android 自定义控件之腾讯安全卫士