一晾嘶、JVM參數(shù)類型
JVM參數(shù)類型分為3種:標(biāo)配參數(shù)妓雾,X參數(shù),XX參數(shù)垒迂。
二械姻、標(biāo)配參數(shù)
java
:
-version
,-help
机断,-client
楷拳,-server
,-classpath
吏奸, -cp
欢揖,-showversion
此類參數(shù)無論jdk怎么升級(jí),參數(shù)仍然保持不變奋蔚,相對(duì)比較穩(wěn)定的參數(shù)她混。
三、X參數(shù)
非標(biāo)準(zhǔn)化參數(shù)泊碑,變化較小
-Xin
: 解釋執(zhí)行坤按。
-Xcomp
: 第一次使用就編譯成本地代碼。
-Xmixed
: 混合模式蛾狗,JVM自己來決定是否編譯成本地代碼晋涣,默認(rèn)使用的就是混合模式。
[root@yun-develop-service_01 ycopen]# java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
[root@yun-develop-service_01 ycopen]# java -Xint -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, interpreted mode)
[root@yun-develop-service_01 ycopen]# java -Xcomp -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, compiled mode)
四沉桌、XX參數(shù)
非標(biāo)準(zhǔn)化參數(shù)谢鹊,相對(duì)不穩(wěn)定,主要用于JVM調(diào)優(yōu)和debug留凭。它分為Boolean型和K-V型兩種類型佃扼。
1)Boolean類型
1、格式
-XX:[+-]<name>
蔼夜, 其中+-表示啟用或禁用name屬性兼耀。
2、示例
-XX:+UseConcMarkSweepGC
表示啟用CMS垃圾收集器求冷。
-XX:+UseG1GC
表示啟用G1垃圾收集器瘤运。
2)K-V類型
1、格式
-XX:<name>=<value>
表示name屬性對(duì)應(yīng)的值是value匠题。
2拯坟、示例
-XX:MaxGCPauseMillis=500
表示GC的最大停頓時(shí)間是500毫秒。
注意:-Xmx和-Xms表示設(shè)置JVM的最大內(nèi)存和最小內(nèi)存韭山,它們不是X參數(shù)郁季,而是XX參數(shù)冷溃。
-Xmx
等價(jià)于-XX:MaxHeapSize
-Xms
等價(jià)于-XX:InitialHeapSize
-Xss
等價(jià)于-XX:ThreadStackSize
[root@yun-develop-service_01 ycopen]# jinfo -flag MaxHeapSize 10211
-XX:MaxHeapSize=3221225472
五、常用JVM參數(shù)
-Xms
: 初始堆大小梦裂,是指設(shè)定程序啟動(dòng)時(shí)占用內(nèi)存大小似枕,默認(rèn)為服務(wù)器內(nèi)存的1/64。大點(diǎn)程序會(huì)啟動(dòng)的快一點(diǎn)年柠,但是也可能會(huì)導(dǎo)致機(jī)器暫時(shí)間變慢凿歼。
-Xmx
: 最大堆大小,是指設(shè)定程序運(yùn)行期間最大可占用的內(nèi)存大小彪杉,默認(rèn)為服務(wù)器內(nèi)存的1/4毅往。如果程序運(yùn)行需要占用更多的內(nèi)存,超出了這個(gè)設(shè)置值派近,就會(huì)拋出OutOfMemory異常。
-Xss
: 為jvm啟動(dòng)的每個(gè)線程分配的內(nèi)存大小洁桌,是指設(shè)定每個(gè)線程的堆棧大小渴丸,默認(rèn)為512K-1024K,大小取決于服務(wù)器配置另凌,從java8以后谱轨,默認(rèn)都是1024K。這個(gè)要依據(jù)你的程序吠谢,看一個(gè)線程大約需要占用多少內(nèi)存土童,可能會(huì)有多少線程同時(shí)運(yùn)行等。
-Xmn
: 年輕代大小
-MetaspaceSize
: 元空間大小
整個(gè)堆大小=年輕代大小 + 年老代大小 + 持久代(JDK1.8以后稱為元空間)大小
六工坊、JVM內(nèi)存配置規(guī)范
- 默認(rèn)空余堆內(nèi)存小于40%時(shí)献汗,JVM就會(huì)增大堆直到-Xmx的最大限制;空余堆內(nèi)存大于70%時(shí)王污,JVM會(huì)減少堆直到-Xms的最小限制罢吃。 因此服務(wù)器一般設(shè)置-Xms和-Xmx相等以避免在每次GC后調(diào)整堆的大小。
- 可以利用JVM提供的-Xmn昭齐,-Xms尿招,-Xmx等選項(xiàng)進(jìn)行堆內(nèi)存設(shè)置; 一般將-Xms和-Xmx選項(xiàng)設(shè)置為相同阱驾,而-Xmn為1/4的-Xmx值就谜,建議堆的最大值可以設(shè)置為可用內(nèi)存的最大值的80%。
- 16G內(nèi)存的服務(wù)器配置為:-Xmx=16G*0.8=12G里覆,-Xms默認(rèn)和-Xmx大小一樣丧荐,也為12G。-Xmn為1/4的-Xmx值租谈,為4G篮奄。
七捆愁、配置示例
- 服務(wù)器硬件配置
8核CPU、8G 內(nèi)存窟却,JDK 1.8.X - 參數(shù)配置實(shí)例
-server -Xmx3550m -Xms3550m -Xmn1256m -Xss128k -XX:SurvivorRatio=6 -XX:MaxPermSize=256m -XX:ParallelGCThreads=8 -XX:MaxTenuringThreshold=0 -XX:+UseConcMarkSweepGC
- 調(diào)優(yōu)說明
- -Xmx 與 -Xms 相同以避免JVM反復(fù)重新申請(qǐng)內(nèi)存昼丑。-Xmx 的大小約等于系統(tǒng)內(nèi)存大小的一半,即充分利用系統(tǒng)資源夸赫,又給予系統(tǒng)安全運(yùn)行的空間菩帝。
- -Xmn1256m 設(shè)置年輕代大小為1256MB。此值對(duì)系統(tǒng)性能影響較大茬腿,Sun官方推薦配置年輕代大小為整個(gè)堆的3/8呼奢。
- -Xss128k 設(shè)置較小的線程棧以支持創(chuàng)建更多的線程,支持海量訪問切平,并提升系統(tǒng)性能握础。
- -XX:SurvivorRatio=6 設(shè)置年輕代中Eden區(qū)與Survivor區(qū)的比值。系統(tǒng)默認(rèn)是8悴品,根據(jù)經(jīng)驗(yàn)設(shè)置為6禀综,則2個(gè)Survivor區(qū)與1個(gè)Eden區(qū)的比值為2:6,一個(gè)Survivor區(qū)占整個(gè)年輕代的1/8苔严。
- -XX:ParallelGCThreads=8 配置并行收集器的線程數(shù)定枷,即同時(shí)8個(gè)線程一起進(jìn)行垃圾回收。此值一般配置為與CPU數(shù)目相等届氢。
- -XX:MaxTenuringThreshold=0 設(shè)置垃圾最大年齡(在年輕代的存活次數(shù))欠窒。如果設(shè)置為0的話,則年輕代對(duì)象不經(jīng)過Survivor區(qū)直接進(jìn)入年老代退子。對(duì)于年老代比較多的應(yīng)用岖妄,可以提高效率;如果將此值設(shè)置為一個(gè)較大值絮供,則年輕代對(duì)象會(huì)在Survivor區(qū)進(jìn)行多次復(fù)制衣吠,這樣可以增加對(duì)象再年輕代的存活時(shí)間,增加在年輕代即被回收的概率壤靶。根據(jù)被海量訪問的動(dòng)態(tài)Web應(yīng)用之特點(diǎn)缚俏,其內(nèi)存要么被緩存起來以減少直接訪問DB,要么被快速回收以支持高并發(fā)海量請(qǐng)求贮乳,因此其內(nèi)存對(duì)象在年輕代存活多次意義不大忧换,可以直接進(jìn)入年老代,根據(jù)實(shí)際應(yīng)用效果向拆,在這里設(shè)置此值為0亚茬。
- -XX:+UseConcMarkSweepGC 設(shè)置年老代為并發(fā)收集。CMS(ConcMarkSweepGC)收集的目標(biāo)是盡量減少應(yīng)用的暫停時(shí)間浓恳,減少Full GC發(fā)生的幾率刹缝,利用和應(yīng)用程序線程并發(fā)的垃圾回收線程來標(biāo)記清除年老代內(nèi)存碗暗,適用于應(yīng)用中存在比較多的長生命周期對(duì)象的情況。