jvm 基礎(chǔ)篇-(1)- 參數(shù)陷阱(-钾虐、-X噪窘、-XX)

image.png

Java啟動參數(shù)共分為三類;

  • 其一是標(biāo)準(zhǔn)參數(shù)(-)效扫,所有的JVM實現(xiàn)都必須實現(xiàn)這些參數(shù)的功能倔监,而且向后兼容;
  • 其二是非標(biāo)準(zhǔn)參數(shù)(-X)菌仁,默認(rèn)jvm實現(xiàn)這些參數(shù)的功能浩习,但是并不保證所有jvm實現(xiàn)都滿足,且不保證向后兼容济丘;
  • 其三是非Stable參數(shù)(-XX)谱秽,此類參數(shù)各個jvm實現(xiàn)會有所不同,將來可能會隨時取消,需要慎重使用疟赊;

-Xms10m
設(shè)置堆最小值為10M

-Xmx10m
設(shè)置堆最大值為10M

-Xmn10m
設(shè)置年輕代大小為10M

-XX:NewSize和-XX:MaxNewSize
用于設(shè)置年輕代的大小郊供,建議設(shè)為整個堆大小的1/3或者1/4,兩個值設(shè)為一樣大。

-XX:SurvivorRatio=8
年輕代中Eden區(qū)與兩個Survivor區(qū)的比值听绳。注意Survivor區(qū)有兩個颂碘。如:8,表示Eden:Survivor=8:1椅挣,一個Survivor區(qū)占整個年輕代的1/10

-XX:NewRatio=3
設(shè)置年輕代(EC+S0C+S1C)和年老代(OC)的比值头岔。如:為3,表示年輕代與年老代比值為1:3鼠证,年輕代占整個年輕代年老代和的1/4(jdk1.8峡竣,默認(rèn)2)

-XX:InitialTenuringThreshol和-XX:MaxTenuringThreshold
用于設(shè)置晉升到老年代的對象年齡的最小值和最大值,每個對象在堅持過一次Minor GC之后量九,年齡就加1适掰。

-XX:+PrintGCDetails
打印GC的具體信息

-XX:+PrintTenuringDistribution
這個參數(shù)用于顯示每次Minor GC時Survivor區(qū)中各個年齡段的對象的大小。

-XX:+PrintCommandLineFlags
打印傳遞給虛擬機的顯式和隱式參數(shù)(在log日志中第一行就輸出啟動參數(shù))

-XX:+HeapDumpOnOutOfMemoryError
OOM時導(dǎo)出堆到文件

-XX:HeapDumpPath=d:/a.dump
dump出來的數(shù)據(jù)存放在D盤下a.dump中

-XX:OnOutOfMemoryError=D:/printstack.bat %p
%p代表的是當(dāng)前java進(jìn)程的pid 荠列,當(dāng)發(fā)生內(nèi)存溢出的時候執(zhí)行printstack.bat這個腳本类浪,通常可以用作線上內(nèi)存溢出的報警機制肌似,比如發(fā)短信或者郵件通知

-XX:loggc:D:/a.log
將jvm的日志存儲到指定文件

-XX:PretenureSizeThreshold=3M
對象的大小大于3M時將直接進(jìn)入老年代

-XX:-HandlePromotionFailure
在發(fā)送Minor GC之前费就,虛擬機會先檢查老年代最大可用的連續(xù)空間是否大于新生代對象總空間,如果這個條件成立川队,那么Minor GC可用確保是安全的力细,如果不成立,則虛擬機會查看HandlePromotionFailure設(shè)置值是否允許擔(dān)保失敗固额,如果允許眠蚂,會繼續(xù)檢查之前歷次Minor GC中晉升到老年代的平均對象大小是否<老年代最大可用的連續(xù)空間,如果小于斗躏,將嘗試進(jìn)行一次Minor GC逝慧,盡管這次GC是有風(fēng)險的,如果大于或者HandlePromotionFailure設(shè)置不允許冒險瑟捣,那么這時要進(jìn)行一次Full GC

-verbose
-verbose:class 輸出jvm載入類的相關(guān)信息馋艺,當(dāng)jvm報告說找不到類或者類沖突時可此進(jìn)行診斷。
-verbose:gc 輸出每次GC的相關(guān)情況迈套。
-verbose:jni 輸出native方法調(diào)用的相關(guān)情況捐祠,一般用于診斷jni調(diào)用錯誤信息。

-XX:+UseTLAB
默認(rèn)是開啟的桑李,TLAB內(nèi)存空間非常小踱蛀,默認(rèn)占整個Eden區(qū)的1%窿给。
個人建議:不要關(guān)閉!B示堋崩泡!

-XX:+TLABSize
自調(diào)整TLABRefillWasteFraction 閥值
個人建議:不要調(diào)整,采用虛擬機默認(rèn)調(diào)整b颉=亲病!

-XX:TLABRefillWasteFraction
設(shè)置維護進(jìn)入TLAB空間單個對象大小勃痴,比例值谒所,默認(rèn)1/64,對象大于該值會去Eden區(qū)創(chuàng)建沛申。

-XX:TLABWasteTargetPercent
設(shè)置TLAB空間所占用Eden空間的百分比大辛恿臁(打破1%)

-XX:+PrintTLAB
打印TLAB信息

-XX:+UseBiasedLocking
啟用偏向鎖

-XX:BiasedLockingStartupDelay = 0
配合-XX:+UseBiasedLocking參數(shù)使用,一般啟動偏向鎖默認(rèn)是應(yīng)用程序啟動幾秒鐘之后才激活铁材,設(shè)置為0則是關(guān)閉延遲

-XX:PreBlockSpin=10
控制多線程鎖升級到輕量級鎖時尖淘,其中自旋鎖優(yōu)化的自旋次數(shù)


CMS常用參數(shù)

-XX:+UseConcMarkSweepGC
開啟并發(fā)標(biāo)記清除(CMS)收集器

-XX:+UseCMSInitiatingOccupancyOnly
始終基于設(shè)定的閾值,不根據(jù)運行情況進(jìn)行調(diào)整(陷阱)著觉。
用-XX+UseCMSInitiatingOccupancyOnly標(biāo)志來命令JVM不基于運行時收集的數(shù)據(jù)來啟動CMS垃圾收集周期村生。而是,當(dāng)該標(biāo)志被開啟時饼丘,JVM通過CMSInitiatingOccupancyFraction的值進(jìn)行每一次CMS收集梆造。然而,請記住大多數(shù)情況下葬毫,JVM比我們自己能作出更好的垃圾收集決策。因此屡穗,只有當(dāng)我們充足的理由(比如測試)并且對應(yīng)用程序產(chǎn)生的對象的生命周期有深刻的認(rèn)知時贴捡,才應(yīng)該使用該標(biāo)志。
eg: 如果沒有 -XX:+UseCMSInitiatingOccupancyOnly 這個參數(shù), 只有第一次會使用CMSInitiatingPermOccupancyFraction=68 這個值村砂。JVM后面的情況會自動調(diào)整烂斋。
如果設(shè)置了 -XX:+UseCMSInitiatingOccupancyOnly 這個參數(shù),就會完全參照-XX:CMSInitiatingOccupancyFraction=XX 設(shè)定的值進(jìn)行回收础废,摒棄了JVM自身的優(yōu)化汛骂。

-XX:CMSInitiatingOccupancyFraction=68
使用CMS收集器的情況下,老年代使用了指定閾值的內(nèi)存時评腺,出發(fā)Old GC帘瞭,默認(rèn)是開啟的,TLAB內(nèi)存空間非常小蒿讥,默認(rèn)占整個Eden區(qū)的1%蝶念。
默認(rèn)為68抛腕,即當(dāng)年老代的空間使用率達(dá)到68%時,會執(zhí)行一次CMS回收媒殉。
(陷阱) 如果內(nèi)存使用率增長過快担敌,CMS執(zhí)行Old GC回收??過程中,已經(jīng)出現(xiàn)了內(nèi)存不足的情況廷蓉,此時CMS回收??就會失斎狻(會報錯:Concurrent Mode Failure),虛擬機會做降級:將啟動SerialOld串行收集器進(jìn)行垃圾回收桃犬,如果發(fā)生這種場景就會出現(xiàn)STW刹悴,直到垃圾回收結(jié)束??。這樣就會造成應(yīng)用程序停頓時間拉長疫萤。
針對陷阱的建議:
-如果內(nèi)存增長緩慢:建議將-XX:CMSInitiatingOccupancyFraction設(shè)置可以調(diào)高些颂跨,降低觸發(fā)CMS回收??頻率。
-如果內(nèi)存增長很快:建議將-XX:CMSInitiatingOccupancyFraction設(shè)置值較低些扯饶,可以提前進(jìn)行CMS GC回收??恒削。


G1常用參數(shù)

-XX:+UseG1GC
開啟G1回收器

‐XX:G1HeapRegionSize=2
指定分區(qū)大小(1MB~32MB,且必須是2的冪)
Region大形残颉:總堆的大小/2048(JVM最多可以2048個Region)

-XX:InitiatingHeapOccupancyPercen=45
默認(rèn)值:45% 钓丰,當(dāng)老年代占用整個堆空間45%的時候嘗試觸發(fā)新生代+老年代一起回收的混合回收階段。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末每币,一起剝皮案震驚了整個濱河市携丁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兰怠,老刑警劉巖梦鉴,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異揭保,居然都是意外死亡肥橙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門秸侣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來存筏,“玉大人,你說我怎么就攤上這事味榛⊥旨幔” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵搏色,是天一觀的道長善茎。 經(jīng)常有香客問我,道長频轿,這世上最難降的妖魔是什么巾表? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任汁掠,我火速辦了婚禮,結(jié)果婚禮上集币,老公的妹妹穿的比我還像新娘考阱。我一直安慰自己,他們只是感情好鞠苟,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布乞榨。 她就那樣靜靜地躺著,像睡著了一般当娱。 火紅的嫁衣襯著肌膚如雪吃既。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天跨细,我揣著相機與錄音鹦倚,去河邊找鬼。 笑死冀惭,一個胖子當(dāng)著我的面吹牛震叙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播散休,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼媒楼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了戚丸?” 一聲冷哼從身側(cè)響起划址,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎限府,沒想到半個月后夺颤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡胁勺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年拂共,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姻几。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖势告,靈堂內(nèi)的尸體忽然破棺而出蛇捌,到底是詐尸還是另有隱情,我是刑警寧澤咱台,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布络拌,位于F島的核電站,受9級特大地震影響回溺,放射性物質(zhì)發(fā)生泄漏春贸。R本人自食惡果不足惜混萝,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萍恕。 院中可真熱鬧逸嘀,春花似錦、人聲如沸允粤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽类垫。三九已至司光,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悉患,已是汗流浹背残家。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留售躁,地道東北人坞淮。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像迂求,于是被迫代替她去往敵國和親碾盐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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

  • http://www.cnblogs.com/angeldevil/p/3801189.html值得一看 Clas...
    snail_knight閱讀 1,423評論 1 0
  • 一 揩局、java虛擬機底層結(jié)構(gòu)詳解 我們知道毫玖,一個JVM實例的行為不光是它自己的事,還涉及到它的子系統(tǒng)凌盯、存儲區(qū)域付枫、...
    葡萄喃喃囈語閱讀 1,484評論 0 4
  • Java啟動參數(shù)共分為三類; 其一是標(biāo)準(zhǔn)參數(shù)(-)驰怎,所有的JVM實現(xiàn)都必須實現(xiàn)這些參數(shù)的功能阐滩,而且向后兼容; 其二...
    zychen143閱讀 1,606評論 0 0
  • 內(nèi)存溢出和內(nèi)存泄漏的區(qū)別 內(nèi)存溢出:out of memory县忌,是指程序在申請內(nèi)存時掂榔,沒有足夠的內(nèi)存空間供其使用,...
    Aimerwhy閱讀 741評論 0 1
  • 來到小白理財訓(xùn)練營不到2周症杏,真的是刷新了以前的思維觀念装获,以前感覺股市很恐怖,水太深厉颤,好多人一夜暴富穴豫,一夜又變成窮光...
    千凌冰閱讀 302評論 5 8