JVM參數(shù)簡(jiǎn)介

1. JVM參數(shù)分類(lèi)

  • 標(biāo)準(zhǔn)參數(shù)(-)唤崭,所有的JVM實(shí)現(xiàn)都必須實(shí)現(xiàn)這些參數(shù)的功能丸逸,而且向后兼容;
  • 非標(biāo)準(zhǔn)參數(shù)(-X)猛蔽,默認(rèn)jvm實(shí)現(xiàn)這些參數(shù)的功能,但是并不保證所有jvm實(shí)現(xiàn)都滿足灵寺,且不保證向后兼容曼库;
  • 非Stable參數(shù)(-XX),此類(lèi)參數(shù)各個(gè)jvm實(shí)現(xiàn)會(huì)有所不同略板,將來(lái)可能會(huì)隨時(shí)取消毁枯,需要慎重使用,一般JVM調(diào)優(yōu)使用的即此類(lèi)參數(shù)叮称。

2. 標(biāo)準(zhǔn)參數(shù)(-)

比如-version种玛、-help等藐鹤,幾乎所有的JDK版本都不會(huì)改變。下面再列舉幾個(gè)常見(jiàn)的標(biāo)準(zhǔn)參數(shù):

  • -client
    設(shè)置JVM使用client模式赂韵,常用于客戶端應(yīng)用程序或者調(diào)試娱节。其特點(diǎn)為啟動(dòng)速度快,但是運(yùn)行時(shí)性能和內(nèi)存效率不高祭示。

  • -server
    設(shè)置JVM使用server模式括堤,一般線上應(yīng)用都使用此模式,在具有64位能力的jdk環(huán)境下將默認(rèn)啟用該模式绍移,而忽略-client參數(shù)悄窃。其特點(diǎn)是啟動(dòng)速度慢,運(yùn)行性能和內(nèi)存效率高蹂窖。

  • -classpath classpath / -cp classpath
    使用-classpath后jvm將不再使用CLASSPATH中的類(lèi)搜索路徑轧抗,如果-classpath和CLASSPATH都沒(méi)有設(shè)置,則jvm使用當(dāng)前路徑(.)作為類(lèi)搜索路徑瞬测。
    jvm搜索類(lèi)的方式和順序?yàn)椋築ootstrap横媚,Extension,User月趟。
    Bootstrap中的路徑是jvm自帶的jar或zip文件灯蝴,jvm首先搜索這些包文件芹啥,用System.getProperty("sun.boot.class.path")可得到搜索路徑鞠绰。
    Extension是位于JRE_HOME/lib/ext目錄下的jar文件,jvm在搜索完Bootstrap后就搜索該目錄下的jar文件汉嗽,用System.getProperty("java.ext.dirs")可得到搜索路徑因妇。
    User搜索順序?yàn)楫?dāng)前路徑.问潭、CLASSPATH、-classpath婚被,jvm最后搜索這些目錄狡忙,用System.getProperty("java.class.path")可得到搜索路徑。

  • -Dproperty=value
    設(shè)置系統(tǒng)屬性名/值對(duì)址芯,運(yùn)行在此jvm之上的應(yīng)用程序可用System.getProperty("property")得到value的值灾茁。如果value中有空格,則需要用雙引號(hào)將該值括起來(lái)谷炸,如-Dname= "space string"北专。
    該參數(shù)通常用于設(shè)置系統(tǒng)級(jí)全局變量值,如配置文件路徑淑廊,以便該屬性在程序中任何地方都可訪問(wèn)逗余。

  • -jar
    指定以jar包的形式運(yùn)行應(yīng)用程序。使用這種方式季惩,jar包中的mainfest文件中必須聲明初始加載的Main-class录粱,同時(shí)Main-class必須有public static void main(String[] args)方法腻格。

  • -verbose:class
    輸出jvm載入類(lèi)的相關(guān)信息,當(dāng)jvm報(bào)告說(shuō)找不到類(lèi)或者類(lèi)沖突時(shí)可此進(jìn)行診斷啥繁。
  • -verbose:gc
    輸出每次GC的相關(guān)情況菜职。
  • -verbose:jni
    輸出native方法調(diào)用的相關(guān)情況,一般用于診斷jni調(diào)用錯(cuò)誤信息旗闽。

3. 非標(biāo)準(zhǔn)參數(shù)(-X)

一般很少使用酬核。

  • -Xint,解釋執(zhí)行模式适室,所有的字節(jié)碼將被直接執(zhí)行嫡意,而不會(huì)編譯成本地碼;
  • -Xcomp捣辆,編譯模式蔬螟;
  • -Xmixed,開(kāi)啟混合模式(默認(rèn)),先編譯成字節(jié)碼汽畴,然后執(zhí)行旧巾。

4. 非Stable參數(shù)(-XX)

這類(lèi)參數(shù)是進(jìn)行jvm參數(shù)調(diào)優(yōu)可能會(huì)進(jìn)行修改,不過(guò)這類(lèi)參數(shù)不是穩(wěn)定的忍些,不同版本的jvm中鲁猩,可能對(duì)應(yīng)的參數(shù)名稱(chēng)不同。并且可能在未來(lái)的版本被刪除或重命名罢坝。

4.1 類(lèi)型分類(lèi)

-XX參數(shù)按照參數(shù)類(lèi)型進(jìn)行分類(lèi)的話廓握,可以分成兩類(lèi):布爾類(lèi)型和KV鍵值對(duì)類(lèi)型。

4.1.1 布爾類(lèi)型

-XX:+某個(gè)屬性 開(kāi)啟某個(gè)jvm屬性炸客,-XX:+PrintGCDetails疾棵,開(kāi)啟GC詳細(xì)信息戈钢。
-XX:-某個(gè)屬性 關(guān)閉某個(gè)jvm屬性痹仙,不是所有的屬性都如此

4.1.2 KV鍵值對(duì)類(lèi)型

-XX:屬性key=值value。比如-XX:Metaspace=128m殉了、-XX:SurvivorRatio=4开仰。

4.2. 功能分類(lèi)

-XX參數(shù)按照功能進(jìn)行分類(lèi)的話,可以大概分為

  • 行為參數(shù):用于改變jvm的一些基礎(chǔ)行為薪铜;
  • 性能參數(shù):用于jvm的性能調(diào)優(yōu)众弓;
  • 調(diào)試參數(shù):一般用于打開(kāi)跟蹤、打印隔箍、輸出等jvm參數(shù)谓娃,用于顯示jvm更加詳細(xì)的信息。

4.2.1 行為參數(shù)

  • -XX:-DisableExplicitGC 禁止調(diào)用System.gc()蜒滩;但jvm的gc仍然有效
  • -XX:+MaxFDLimit 最大化文件描述符的數(shù)量限制
  • -XX:+ScavengeBeforeFullGC 新生代GC優(yōu)先于Full GC執(zhí)行
  • -XX:+UseGCOverheadLimit 在拋出OOM之前限制jvm耗費(fèi)在GC上的時(shí)間比例
  • -XX:-UseConcMarkSweepGC 對(duì)老生代采用并發(fā)標(biāo)記交換算法進(jìn)行GC
  • -XX:-UseParallelGC 啟用并行GC
  • -XX:-UseParallelOldGC 對(duì)Full GC啟用并行滨达,當(dāng)-XX:-UseParallelGC啟用時(shí)該項(xiàng)自動(dòng)啟用
  • -XX:-UseSerialGC 啟用串行GC
  • -XX:+UseThreadPriorities 啟用本地線程優(yōu)先級(jí)

4.2.2 性能參數(shù)

  • -XX:LargePageSizeInBytes=4m 設(shè)置用于Java堆的大頁(yè)面尺寸
  • -XX:MaxHeapFreeRatio=70 GC后java堆中空閑量占的最大比例
  • -XX:MaxNewSize=size 新生成對(duì)象能占用內(nèi)存的最大值
  • -XX:MaxPermSize=64m 老生代對(duì)象能占用內(nèi)存的最大值
  • -XX:MinHeapFreeRatio=40 GC后java堆中空閑量占的最小比例
  • -XX:NewRatio=2 新生代內(nèi)存容量與老生代內(nèi)存容量的比例
  • -XX:NewSize=2.125m 新生代對(duì)象生成時(shí)占用內(nèi)存的默認(rèn)值
  • -XX:ReservedCodeCacheSize=32m 保留代碼占用的內(nèi)存容量
  • -XX:ThreadStackSize=512 設(shè)置線程棧大小奶稠,若為0則使用系統(tǒng)默認(rèn)值
  • -XX:+UseLargePages 使用大頁(yè)面內(nèi)存
  • -Xms等價(jià)于-XX:InitialHeapSize初始化堆內(nèi)存大小
  • -Xmx等價(jià)于-XX:MaxHeapSize最大的堆內(nèi)存大小
  • -Xmn等價(jià)于-XX:NewSize=size設(shè)置初始的年輕代的大小
  • -Xss等價(jià)于-XX:ThresholdStackSize。用于設(shè)置單個(gè)棧的大小捡遍,系統(tǒng)默認(rèn)值是0锌订,不代表?xiàng)4笮?。而是根據(jù)操作系統(tǒng)的不同画株,有不同的值辆飘。比如64位的Linux系統(tǒng)是1024K,而Windows系統(tǒng)依賴(lài)于虛擬內(nèi)存谓传。

4.2.3 調(diào)試參數(shù)

  • -XX:-CITime 打印消耗在JIT編譯的時(shí)間
  • -XX:ErrorFile=./hs_err_pid<pid>.log 保存錯(cuò)誤日志或者數(shù)據(jù)到文件中
  • -XX:-ExtendedDTraceProbes 開(kāi)啟solaris特有的dtrace探針
  • -XX:HeapDumpPath=./java_pid<pid>.hprof 指定導(dǎo)出堆信息時(shí)的路徑或文件名
  • -XX:-HeapDumpOnOutOfMemoryError 當(dāng)首次遭遇OOM時(shí)導(dǎo)出此時(shí)堆中相關(guān)信息
  • -XX:OnError="<cmd args>;<cmd args>" 出現(xiàn)致命ERROR之后運(yùn)行自定義命令
  • -XX:OnOutOfMemoryError="<cmd args>;<cmd args>" 當(dāng)首次遭遇OOM時(shí)執(zhí)行自定義命令
  • -XX:-PrintClassHistogram 遇到Ctrl-Break后打印類(lèi)實(shí)例的柱狀信息蜈项,與jmap -histo功能相同
  • -XX:-PrintConcurrentLocks 遇到Ctrl-Break后打印并發(fā)鎖的相關(guān)信息,與jstack -l功能相同
  • -XX:-PrintCommandLineFlags 打印在命令行中出現(xiàn)過(guò)的標(biāo)記
  • -XX:-PrintCompilation 當(dāng)一個(gè)方法被編譯時(shí)打印相關(guān)信息
  • -XX:-PrintGC 每次GC時(shí)打印相關(guān)信息
  • -XX:-PrintGC Details 每次GC時(shí)打印詳細(xì)信息
  • -XX:-PrintGCTimeStamps 打印每次GC的時(shí)間戳
  • -XX:-TraceClassLoading 跟蹤類(lèi)的加載信息,(jre/lib/rt.jar下的類(lèi)全部加載续挟,起來(lái)類(lèi)用到的時(shí)候再加載)
  • -XX:-TraceClassLoadingPreorder 跟蹤被引用到的所有類(lèi)的加載信息
  • -XX:-TraceClassResolution 跟蹤常量池
  • -XX:-TraceClassUnloading 跟蹤類(lèi)的卸載信息
  • -XX:-TraceLoaderConstraints 跟蹤類(lèi)加載器約束的相關(guān)信息

4.3. 查看參數(shù)

  1. 查看某個(gè)參數(shù)

使用jps -l配合jinfo -flag JVM參數(shù) pid 战得。先用jsp -l查看java進(jìn)程,選擇某個(gè)進(jìn)程號(hào)庸推。

17888 org.jetbrains.jps.cmdline.Launcher
5360 org.jetbrains.idea.maven.server.RemoteMavenServer
18052 demo3.demo3

jinfo -flag PrintGCDetails 18052可以查看18052 Java進(jìn)程的PrintGCDetails參數(shù)信息常侦。

-XX:-PrintGCDetails
  1. 查看所有參數(shù)

使用jps -l配合jinfo -flags pid可以查看所有參數(shù)。

也可以使用java -XX:+PrintFlagsInitial

[Global flags]
     intx ActiveProcessorCount                      = -1            {product}
    uintx AdaptiveSizeDecrementScaleFactor          = 4             {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10            {product}
    uintx AdaptiveSizePausePolicy                   = 0             {product}
······
    uintx YoungPLABSize                             = 4096          {product}
     bool ZeroTLAB                                  = false         {product}
     intx hashCode                                  = 5             {product}

  1. 查看修改后的參數(shù)

使用java -XX:PrintFlagsFinal可以查看修改后的參數(shù)贬媒,與上面類(lèi)似聋亡。只是修改過(guò)后是:=而不是=

  1. 查看常見(jiàn)參數(shù)

如果不想查看所有參數(shù)际乘,可以用-XX:+PrintCommandLineFlags查看常用參數(shù)坡倔。

-XX:InitialHeapSize=132375936 -XX:MaxHeapSize=2118014976 -XX:+PrintCommandLineFlags -XX:+UseCompressedCla

擴(kuò)展閱讀

https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html

https://github.com/MaJesTySA/JVM-JUC-Core/blob/master/docs/JVM.md#%E6%A0%87%E9%85%8D%E5%8F%82%E6%95%B0

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脖含,一起剝皮案震驚了整個(gè)濱河市罪塔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌养葵,老刑警劉巖征堪,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異关拒,居然都是意外死亡佃蚜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)着绊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谐算,“玉大人,你說(shuō)我怎么就攤上這事归露≈拗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵剧包,是天一觀的道長(zhǎng)恐锦。 經(jīng)常有香客問(wèn)我雇毫,道長(zhǎng),這世上最難降的妖魔是什么踩蔚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任棚放,我火速辦了婚禮,結(jié)果婚禮上馅闽,老公的妹妹穿的比我還像新娘飘蚯。我一直安慰自己,他們只是感情好福也,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布局骤。 她就那樣靜靜地躺著,像睡著了一般暴凑。 火紅的嫁衣襯著肌膚如雪峦甩。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天现喳,我揣著相機(jī)與錄音凯傲,去河邊找鬼。 笑死嗦篱,一個(gè)胖子當(dāng)著我的面吹牛冰单,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灸促,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼诫欠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了浴栽?” 一聲冷哼從身側(cè)響起荒叼,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎典鸡,沒(méi)想到半個(gè)月后被廓,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椿每,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年伊者,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片间护。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖挖诸,靈堂內(nèi)的尸體忽然破棺而出汁尺,到底是詐尸還是另有隱情,我是刑警寧澤多律,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布痴突,位于F島的核電站搂蜓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏辽装。R本人自食惡果不足惜帮碰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拾积。 院中可真熱鬧殉挽,春花似錦、人聲如沸拓巧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肛度。三九已至傻唾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間承耿,已是汗流浹背冠骄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留加袋,地道東北人猴抹。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像锁荔,于是被迫代替她去往敵國(guó)和親蟀给。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • JVM參數(shù)分類(lèi) JVM參數(shù)分為標(biāo)準(zhǔn)參數(shù)和非標(biāo)準(zhǔn)參數(shù): 標(biāo)準(zhǔn)參數(shù): "-"開(kāi)頭的參數(shù)阳堕,如-client, -serv...
    齊晉閱讀 3,377評(píng)論 0 4
  • 轉(zhuǎn)載blog.csdn.net/ning109314/article/details/10411495/ JVM工...
    forever_smile閱讀 5,373評(píng)論 1 56
  • 作者:一字馬胡 轉(zhuǎn)載標(biāo)志 【2017-11-12】 更新日志 日期更新內(nèi)容備注 2017-11-12新建文章初版 ...
    beneke閱讀 2,210評(píng)論 0 7
  • 介紹JVM中7個(gè)區(qū)域跋理,然后把每個(gè)區(qū)域可能造成內(nèi)存的溢出的情況說(shuō)明 程序計(jì)數(shù)器:看做當(dāng)前線程所執(zhí)行的字節(jié)碼行號(hào)指示器...
    jemmm閱讀 2,232評(píng)論 0 9
  • 父母——說(shuō)的太多做的太少 很多思想來(lái)自父母老師(天天說(shuō) ——根深蒂固) 什么是對(duì)錯(cuò)(看待事情的立場(chǎng)和角度——一萬(wàn)個(gè)...
    郭倍貝貝閱讀 227評(píng)論 0 0