JVM基礎

參數(shù)

啟動相關

-client

client模式,啟動速度比較快片部,但運行時性能和內存管理效率不高(客戶端或測試)

-server

server模式,啟動速度比較慢,但運行時性能和內存管理效率很高(生產(chǎn)财骨,默認)

-classpath

加載jar包路徑

內存相關

-Xms

堆最小內存,jvm初始化時申請

-Xmx

堆最大內存藏姐,超出報OOM

-Xmn

新生代內存隆箩,包括Eden區(qū)(80%)和兩塊Survior區(qū)(20%)

-XX:NewRatio

新生代與老年代內存占比(減去持久代)

-XX:SurvivorRatio

兩塊Survior區(qū)與Eden區(qū)比例,默認8羔杨,即2:8

-Xss

每個線程堆棧大小

-XX:PermSize

持久代內存

-XX:MaxPermSize

最大持久代內存

GC相關

+表示true捌臊,-表示false

Serial

-XX:+UseSerialGC

年輕代:Serial,老年代:Serial Old

-XX:+UseParNewGC

年輕代:ParNew兜材,老年代:Serial Old

CMS

-XX:+UseConcMarkSweepGC

年輕代:ParNew理澎,老年代:CMS

-XX:-CMSPrecleaningEnabled

不進行 preclean

-XX:CMSInitiatingOccupancyFraction

內存占用率達到多少啟用GC

-XX:+UseCMSCompactAtFullCollection

開啟FullGC后進行內存壓縮

-XX:CMSFullGCsBeforeCompaction

多少次FullGC后進行內存壓縮

-XX:+CMSClassUnloadingEnabled

允許對持久代中不再使用的class元數(shù)據(jù)進行回收

Parallel

-XX:+UseParallelGC

年輕代:Parallel Scavenge,老年代:Serial Old

-XX:+UseParallelOldGC

年輕代:Parallel Scavenge曙寡,老年代:Parallel Old

G1

-XX:+UseG1GC

年輕代:G1糠爬,老年代:G1

通用

-XX:ParallelGCThreads

并行線程數(shù),建議與核心數(shù)一致

-XX:MaxGCPauseMillis

最大GC停頓時間

垃圾收集器

垃圾收集器

圖1中的 ParallelScavenge举庶、Parallel Old 收集器代表的就是 throughput 收集器执隧,現(xiàn)在主流的配置一般是:

  1. ParNew + CMS + Serial Old( 備用 )
  2. ParallelScavenge + Parallel Old( jdk6 )
  3. G1( jdk7 update 4 及以上)
  4. ZGC( jdk11 試驗階段)

新生代的GC算法一般都采用標記-復制算法,老年代一般核心算法都是標記-壓縮算法
!!! jdk11 推出了ZGC收集器,現(xiàn)在看介紹牛逼得一批镀琉,后續(xù)補充說明

serial 收集器(串行)

單線程峦嗤,簡單,適合于單CPU屋摔、客戶端級別寻仗,吞吐量小,GC時會stw凡壤,但是在單核機子或年輕代內存只有幾十上百M的桌面應用上署尤,因為少去了線程切換的開銷,反而效率更高


串行收集器

ParNew 收集器(并行)

多線程模式的 serial 收集器亚侠,在多核情況下要比 serial 性能高曹体,但在單核,甚至是雙核某些情況下硝烂,還不如 serial 收集器箕别。

CMS 收集器(并發(fā),響應時間)

多線程滞谢,并發(fā)標記-清除+壓縮串稀,可以設置FullGC的觸發(fā)內存占比,可以按需要開啟多少次GC后進行內存壓縮狮杨,壓縮會增加暫停時間母截。適合響應時間要求高的場合,缺點是比較耗CPU橄教,且由于是并發(fā)清寇,會消耗部分堆內存,若內存在清理未完成時被占滿护蝶,則無法進行GC华烟,一般需要設置備用串行收集器 Serial Old


并發(fā)標記清除收集器

throughput 收集器(并行,吞吐量)

多線程持灰,適合于吞吐量要求較高的場合盔夜,比較適合中等和大規(guī)模的應用程序,不適合響應時間要求高的程序堤魁,保證最長時延下的最大吞吐量


并行收集器

G1 收集器(并發(fā)喂链,吞吐量,響應時間)

G1收集器是一種服務器式垃圾收集器姨涡,適用于具有大內存容量的多處理器機器衩藤。采用堆內存分區(qū)(region)的方式,同時在執(zhí)行全堆操作(如全局標記)時涛漂,應用程序線程也同步執(zhí)行赏表,防止因為堆內對象過多導致stw检诗,實現(xiàn)高吞吐量以及保證低時延


G1內存模型

jvm檢測工具(具體說明待補全)

jstack

jstat

jmap

jconsole

mat

arthas

總結

  • 一般來說,最大與初始內存設置成一樣瓢剿,可以避免 jvm 頻繁申請內存逢慌,如-Xms和-Xmx,-XX:PermSize和-XX:MaxPermSize间狂;
  • 高吞吐量和低暫停時間是矛盾關系攻泼,需要根據(jù)具體業(yè)務進行設置,因為高吞吐量意味著盡可能不進行GC鉴象,GC時堆內對象過多忙菠,stw時間長,而低暫停時間則需要更為頻繁的GC纺弊,這樣一直保持著短時間的stw時間牛欢。當然現(xiàn)在的G1還有ZGC都避免了全堆掃描,使得其保證高吞吐量的同時也能最大限度兼顧更低的暫停時間
  • 具體的垃圾收集器選擇不僅僅要考慮使用場景淆游,還需要考慮機器本身的性能傍睹,若內存容量低,對時延要求又不是那么高犹菱,選擇并行收集器比CMS拾稳、G1都要好,因為并發(fā)收集器本身是要占堆內存的腊脱。若為單核機器访得,則要選擇串行垃圾收集器

參考文獻

  1. Oracle.Garbage-First Collector[EB/OL].https://.docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html,1993-2018
  2. Oracle.JDK 11 Release Notes[EB/OL].https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#NewFeature,1993-2018
  3. 梁鐘霖.JVM Throughput和CMS垃圾回收器[EB/OL].https://www.liangzl.com/get-article-detail-13400.html,2018-08-17
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末虑椎,一起剝皮案震驚了整個濱河市震鹉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捆姜,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迎膜,死亡現(xiàn)場離奇詭異泥技,居然都是意外死亡,警方通過查閱死者的電腦和手機磕仅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門珊豹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人榕订,你說我怎么就攤上這事店茶。” “怎么了劫恒?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵贩幻,是天一觀的道長轿腺。 經(jīng)常有香客問我,道長丛楚,這世上最難降的妖魔是什么族壳? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮趣些,結果婚禮上仿荆,老公的妹妹穿的比我還像新娘。我一直安慰自己坏平,他們只是感情好拢操,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舶替,像睡著了一般庐冯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坎穿,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天展父,我揣著相機與錄音,去河邊找鬼玲昧。 笑死栖茉,一個胖子當著我的面吹牛,可吹牛的內容都是我干的孵延。 我是一名探鬼主播吕漂,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尘应!你這毒婦竟也來了惶凝?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤犬钢,失蹤者是張志新(化名)和其女友劉穎苍鲜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玷犹,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡混滔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了歹颓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坯屿。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖巍扛,靈堂內的尸體忽然破棺而出领跛,到底是詐尸還是另有隱情,我是刑警寧澤撤奸,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布吠昭,位于F島的核電站喊括,受9級特大地震影響,放射性物質發(fā)生泄漏怎诫。R本人自食惡果不足惜瘾晃,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幻妓。 院中可真熱鬧蹦误,春花似錦、人聲如沸肉津。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妹沙。三九已至偶洋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間距糖,已是汗流浹背玄窝。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悍引,地道東北人恩脂。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像趣斤,于是被迫代替她去往敵國和親俩块。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容

  • Java和C++之間有一堵由內存動態(tài)分配和垃圾收集技術所圍成的“高墻”浓领,墻外面的人想進來玉凯,墻里面的人想出來。 對象...
    胡二囧閱讀 1,089評論 0 4
  • 這篇文章是我之前翻閱了不少的書籍以及從網(wǎng)絡上收集的一些資料的整理联贩,因此不免有一些不準確的地方漫仆,同時不同JDK版本的...
    高廣超閱讀 15,603評論 3 83
  • 原文閱讀 前言 這段時間懈怠了,罪過撑蒜! 最近看到有同事也開始用上了微信公眾號寫博客了歹啼,挺好的~給他們點贊,這博客我...
    碼農(nóng)戲碼閱讀 5,968評論 2 31
  • http://www.cnblogs.com/angeldevil/p/3801189.html值得一看 Clas...
    snail_knight閱讀 1,423評論 1 0
  • 作者:一字馬胡 轉載標志 【2017-11-12】 更新日志 日期更新內容備注 2017-11-12新建文章初版 ...
    beneke閱讀 2,203評論 0 7