JVM參數(shù)總結(jié)

性能調(diào)優(yōu):

-XX:-OmitStackTraceInFastThrow 去掉優(yōu)化多次拋異常

-XX:-UseBiasedLocking 去掉偏向鎖(鎖競爭激烈的場景下加上)

-XX:-UseCounterDecay 禁止JIT調(diào)用計數(shù)器衰減(默認情況下严卖,每次GC時會對調(diào)用計數(shù)器進行砍半的操作趟济,導致有些方法一直溫熱硕舆,永遠都達不到觸發(fā)C2編譯的1萬次的閥值)

-XX:AutoBoxCacheMax=20000 設置Integer緩存的最大值灌闺,默認是127。這個只對Integer有效堕义,對Long無效猜旬。這個參數(shù)只對 server 模式生效

-XX:+UseGCTaskAffinity 將任務映射到GC線程

-XX:+ParallelRefProcEnabled 默認為false,并行的處理Reference對象倦卖,如WeakReference洒擦,除非在GC log里出現(xiàn)Reference處理時間較長的日志,否則效果不會很明顯

-XX:-TieredCompilation 禁用中間編譯層(1怕膛、2熟嫩、3),以便在最大優(yōu)化級別(C2)處解釋或編譯方法

-XX:+UseStringDeduplication JVM在做GC的同時會做重復字符串消除褐捻。只適用G1,只適用于長期存活的對象(默認GC 3次后才有資格掸茅,可通過 -XX:StringDeduplicationAgeThreshold=n修改閾值)

-XX:+AlwaysPreTouch 啟動時就真實分配物理內(nèi)存,默認是使用到才分配柠逞。降低第一次YGC的停頓時間倦蚪,提示Eden區(qū)分配對象速度,但是啟動速度增大20s(8G堆)

-XX:+PerfDisableSharedMem 強制JVM將匿名內(nèi)存用于性能計數(shù)器边苹,而不是映射文件。這有助于避免自發(fā)磁盤I/O導致的隨機VM暫停

-XX:ReservedCodeCacheSize=240M 設置codecache的大小裁僧,比如我們jit編譯的代碼都是放在codecache里的(機器碼代碼)个束,所以codecache如果滿了的話慕购,那帶來的問題就是無法再jit編譯了,運行速度會降低一個數(shù)量級

-XX:GuaranteedSafepointInterval=5000 每經(jīng)過這個配置的時間茬底,都會讓所有線程進入 Safepoint沪悲,一旦所有線程都進入,立刻從 Safepoint 恢復阱表。這個定時主要是為了一些沒必要立刻 Stop the world 的任務執(zhí)行

JVM通用配置

-Xms2048M -Xmx2048M 堆最小殿如、最大的大小

-Xmn3584m 年輕代大小,優(yōu)先級比NewRatio最爬,會覆蓋 NewRatio 的配置

-XX:MetaspaceSize=200m 元空間初始化大小涉馁,建議設置,默認是20m爱致,擴容時會觸發(fā)FULL GC烤送,程序啟動出現(xiàn)FULL GC 可以考慮設置大點這個值

-XX:MaxMetaspaceSize=300m 元空間最大大小

-XX:NewRatio=1 老年代/新生代的比例,只能整數(shù)糠悯。

-XX:MaxDirectMemorySize=1024m 設置堆外直接內(nèi)存帮坚,默認64M。到達該值會觸發(fā)FULL GC

-XX:+ScavengeBeforeFullGC 在執(zhí)行FullGC之前執(zhí)行MinorGC互艾,VM會分2次停頓试和,可以縮短最大停頓時間

-XX:MaxTenuringThreshold=4 對象年齡到達該閾值就會晉升老年代,默認一般是15纫普,CMS默認是6阅悍。

-XX:ParallelGCThreads=12 并行 GC 線程的數(shù)量,一般最好和 CPU 核心數(shù)量相當局嘁。這個參數(shù)只要是并行 GC 都可以使用溉箕。默認情況下,當 CPU 數(shù)量小于8悦昵, ParallelGCThreads 的值等于 CPU 數(shù)量肴茄,當 CPU 數(shù)量大于 8 時,則使用公式:3 +((5*CPU)/ 8)

-XX:ConcGCThreads=12 并行標記的并發(fā)線程數(shù)但指。默認是 (ParallelGCThreads+3)/4

CMS

-XX:+UseConcMarkSweepGC 開啟老年代使用 CMS 垃圾收集器

-XX:+CMSParallelRemarkEnabled 讓重新標記階段進行并行重新標記寡痰,減少暫停時間

-XX:+CMSClassUnloadingEnabled CMS垃圾收集器默認情況下不會卸載類,通過這個開啟

-XX:+CMSScavengeBeforeRemark 在重新標記之前對年輕代做一次minor GC棋凳。在重新標記階段拦坠,標記范圍是整個堆,包含新生代和老年代剩岳。掃描新生代的原因是老年代無用的對象可能被新生代引用贞滨。在重新標記之前對新生代做一次minor gc,減少新生代的存活對象,從而降低重新標記時的開銷晓铆。

-XX:+UseCMSInitiatingOccupancyOnly 命令JVM不基于運行時收集的數(shù)據(jù)來啟動CMS垃圾收集周期勺良。如果沒有指定這個,只有第一次會使用CMSInitiatingPermOccupancyFraction=65 這個值. 后面的情況會自動調(diào)整

-XX:+ExplicitGCInvokesConcurrent 在做System.gc()時會做background模式CMS GC骄噪,即并行FULL GC尚困,可提高FULL GC效率。注链蕊,該參數(shù)在允許systemGC且使用CMS GC時有效

-XX:CMSInitiatingOccupancyFraction=75 當老年代達到這個閾值時事甜,觸發(fā)CMS垃圾回收

-XX:+CMSParallelInitialMarkEnabled 開啟cms初始標記過程中的并行化,進一步提升初始化標記效率

parnew 垃圾收集器

-XX:ParGCCardsPerStrideChunk=8192 指 parnew 垃圾收集器每個線程處理的CardTable數(shù)量滔韵,默認256.8192這個指標是openJdk測試得的一個參考值

日志方面
-XX:+UnlockDiagnosticVMOptions 解鎖任何額外的隱藏參數(shù)

-XX:+PrintCommandLineFlags 打印顯式隱式參數(shù)

-XX:+PrintGCDetails 打印GC的詳細信息

-XX:+PrintGCDateStamps 打印CG發(fā)生的時間戳

-XX:+PrintHeapAtGC 每一次GC前和GC后逻谦,都打印堆信息

-XX:+PrintTenuringDistribution 輸出顯示在survivor空間里面有效的對象的歲數(shù)情況。這個參數(shù)對于設置-XX:MaxTenuringThreshold有很大幫助奏属,閥值需要長時間觀察對象分布跨跨,設置合理即可

-XX:+PrintPromotionFailure 如果有新生代對象晉升到老生代失敗出現(xiàn)的FULL GC,打開這個日志可以看到更詳細的信息

-XX:+UseGCLogFileRotation GC日志文件滾動生成

-XX:NumberOfGCLogFiles=10 GC日志保留文件數(shù)

-XX:GCLogFileSize=10M 每個GC文件的大小

-Xloggc:./gc-%t.log %t會給文件名添加時間戳后綴囱皿,格式是YYYY-MM-DD_HH-MM-SS勇婴。

-XX:+PrintSafepointStatistics 打印安全點統(tǒng)計信息

-XX:PrintSafepointStatisticsCount=1 設置打印安全點統(tǒng)計信息的次數(shù)

-XX:+HeapDumpOnOutOfMemoryError JVM發(fā)生OOM時,自動生成DUMP文件

-XX:-DisplayVMOutput

-XX:+LogVMOutput 必須配合參數(shù)-XX:+UnlockDiagnosticVMOptions使用嘱腥,并且只能加在其后才能生效

-XX:LogFile=./vm.log 編譯時日志輸出

G1參數(shù)

-XX:G1HeapRegionSize=n
設置的 G1 區(qū)域的大小耕渴。值是 2 的冪,范圍是 1 MB 到 32 MB 之間齿兔。目標是根據(jù)最小的 Java 堆大小劃分出約 2048 個區(qū)域橱脸。

-XX:MaxGCPauseMillis=200
為所需的最長暫停時間設置目標值。默認值是 200 毫秒分苇。指定的值不適用于您的堆大小添诉。

-XX:G1NewSizePercent=5
設置要用作年輕代大小最小值的堆百分比。默認值是 Java 堆的 5%医寿。這是一個實驗性的標志栏赴。有關示例,請參見“如何解鎖實驗性虛擬機標志”靖秩。此設置取代了 -XX:DefaultMinNewGenPercent 設置须眷。Java HotSpot VM build 23 中沒有此設置。

-XX:G1MaxNewSizePercent=60
設置要用作年輕代大小最大值的堆大小百分比沟突。默認值是 Java 堆的 60%花颗。這是一個實驗性的標志。有關示例惠拭,請參見“如何解鎖實驗性虛擬機標志”扩劝。此設置取代了 -XX:DefaultMaxNewGenPercent 設置。Java HotSpot VM build 23 中沒有此設置。

-XX:ParallelGCThreads=n
設置 STW 工作線程數(shù)的值棒呛。將 n 的值設置為邏輯處理器的數(shù)量葡公。n 的值與邏輯處理器的數(shù)量相同,最多為 8条霜。

如果邏輯處理器不止八個,則將 n 的值設置為邏輯處理器數(shù)的 5/8 左右涵亏。這適用于大多數(shù)情況宰睡,除非是較大的 SPARC 系統(tǒng),其中 n 的值可以是邏輯處理器數(shù)的 5/16 左右气筋。

-XX:ConcGCThreads=n
設置并發(fā)標記的線程數(shù)拆内。將 n 設置為并行垃圾回收線程數(shù) (ParallelGCThreads) 的 1/4 左右。

-XX:InitiatingHeapOccupancyPercent=45
設置觸發(fā)標記周期的 Java 堆占用率閾值宠默。默認占用率是整個 Java 堆的 45%麸恍。

-XX:G1MixedGCLiveThresholdPercent=65
為混合垃圾回收周期中要包括的舊區(qū)域設置占用率閾值。默認占用率為 65%搀矫。這是一個實驗性的標志抹沪。有關示例,請參見“如何解鎖實驗性虛擬機標志”瓤球。此設置取代了 -XX:G1OldCSetRegionLiveThresholdPercent 設置融欧。Java HotSpot VM build 23 中沒有此設置。

-XX:G1HeapWastePercent=10
設置您愿意浪費的堆百分比卦羡。如果可回收百分比小于堆廢物百分比噪馏,Java HotSpot VM 不會啟動混合垃圾回收周期。默認值是 10%绿饵。Java HotSpot VM build 23 中沒有此設置欠肾。

-XX:G1MixedGCCountTarget=8
設置標記周期完成后,對存活數(shù)據(jù)上限為 G1MixedGCLIveThresholdPercent 的舊區(qū)域執(zhí)行混合垃圾回收的目標次數(shù)拟赊。默認值是 8 次混合垃圾回收刺桃。混合回收的目標是要控制在此目標次數(shù)以內(nèi)要门。Java HotSpot VM build 23 中沒有此設置虏肾。

-XX:G1OldCSetRegionThresholdPercent=10
設置混合垃圾回收期間要回收的最大舊區(qū)域數(shù)。默認值是 Java 堆的 10%欢搜。Java HotSpot VM build 23 中沒有此設置封豪。

-XX:G1ReservePercent=10
設置作為空閑空間的預留內(nèi)存百分比,以降低目標空間溢出的風險炒瘟。默認值是 10%吹埠。增加或減少百分比時,請確保對總的 Java 堆調(diào)整相同的量。Java HotSpot VM build 23 中沒有此設置缘琅。

非JVM內(nèi)部參數(shù)

-Djava.security.egd=file:/dev/./urandom 加快 SecureRandom 隨機數(shù)產(chǎn)生過程

-Djava.net.preferIPv4Stack=true 當java.net.preferIPv4Stack為默認值false時粘都,在支持IPv6的雙棧系統(tǒng)上,使用Java的Socket會默認通過底層native方法創(chuàng)建一個IPv6 Socket刷袍,這個IPv6 Socket可以同時支持和IPv4或IPv6主機通信翩隧。如果設置為true,Java程序?qū)o法使用IPv6進行網(wǎng)絡通信呻纹,也就是僅支持IPv4

-Djava.awt.headless=true Headless模式是系統(tǒng)的一種配置模式堆生。在系統(tǒng)可能缺少顯示設備、鍵盤或鼠標這些外設的情況下可以使用該模式雷酪。一般是在程序開始激活headless模式淑仆,告訴程序,現(xiàn)在你要工作在Headless mode下哥力,就不要指望硬件幫忙了蔗怠,你得自力更生,依靠系統(tǒng)的計算能力模擬出這些特性來

-Dsun.net.inetaddr.ttl=60 JVM緩存DNS解析結(jié)果的時間(秒) 吩跋,參考這篇文章

-server server模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寞射,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子钞澳,更是在濱河造成了極大的恐慌怠惶,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轧粟,死亡現(xiàn)場離奇詭異策治,居然都是意外死亡,警方通過查閱死者的電腦和手機兰吟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門通惫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人混蔼,你說我怎么就攤上這事履腋。” “怎么了惭嚣?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵遵湖,是天一觀的道長。 經(jīng)常有香客問我晚吞,道長延旧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任槽地,我火速辦了婚禮迁沫,結(jié)果婚禮上芦瘾,老公的妹妹穿的比我還像新娘。我一直安慰自己集畅,他們只是感情好近弟,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挺智,像睡著了一般祷愉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赦颇,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天谣辞,我揣著相機與錄音,去河邊找鬼沐扳。 笑死,一個胖子當著我的面吹牛句占,可吹牛的內(nèi)容都是我干的沪摄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼纱烘,長吁一口氣:“原來是場噩夢啊……” “哼杨拐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起擂啥,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤哄陶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后哺壶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屋吨,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年山宾,在試婚紗的時候發(fā)現(xiàn)自己被綠了至扰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡资锰,死狀恐怖敢课,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绷杜,我是刑警寧澤直秆,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站鞭盟,受9級特大地震影響圾结,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜懊缺,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一疫稿、第九天 我趴在偏房一處隱蔽的房頂上張望培他。 院中可真熱鬧捂刺,春花似錦捏卓、人聲如沸际邻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朴乖。三九已至育灸,卻和暖如春驰后,著一層夾襖步出監(jiān)牢的瞬間号坡,已是汗流浹背懊烤。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宽堆,地道東北人腌紧。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像畜隶,于是被迫代替她去往敵國和親壁肋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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