4.JVM系列-垃圾收集器總結(jié)

目錄

一爪喘、背景

二颜曾、垃圾收集器比較

三、常用JVM參數(shù)

四秉剑、垃圾收集器對(duì)比

五泛豪、關(guān)系圖

一、背景

? ? ? 前面的章節(jié)單獨(dú)說(shuō)了下CMS和G1侦鹏,而更早的收集器如并沒(méi)有被淘汰诡曙,當(dāng)CMS和G1收集失敗后會(huì)轉(zhuǎn)為使用Serial Old收集器進(jìn)行一次full gc,所以學(xué)習(xí)其他的收集器也是有必要的略水。? ?

二价卤、垃圾收集器比較

垃圾收集器特點(diǎn)適合場(chǎng)景

Serial(新生代)單線程全程STW流量小、內(nèi)存<4G渊涝、單核

Serial Old(老)同上同上

ParNew(新)Serial的多線程版本搭配CMS實(shí)現(xiàn)低停頓

ParallelScavenge(新)可設(shè)置最大gc停頓時(shí)間及gc時(shí)間比吞吐高(用戶(hù)時(shí)間/用戶(hù)+GC)慎璧,適用于非交互式床嫌,如批處理應(yīng)用

Parallel?Old(老)同上同上

CMS(老年代)低停頓、易產(chǎn)生內(nèi)存碎片想低停頓但可以容忍較多的fgc

G1(新+老)低停頓胸私、不易產(chǎn)生內(nèi)存碎片內(nèi)存>=6G厌处、停頓可控、不容忍頻繁fgc

ZGC(新+老)STW不超過(guò)10毫秒

STW不會(huì)隨堆大小而增加

堆范圍幾百M(fèi)~幾TB岁疼。

使用大中小內(nèi)存低停頓為目標(biāo)

G1的目標(biāo)是淘汰CMS阔涉,ZGC的目標(biāo)是淘汰G1

三、常用JVM參數(shù)

CMS和G1相關(guān)的參數(shù)在上2篇章節(jié)已說(shuō)明五续,這里不再列洒敏。

參數(shù)意義優(yōu)化建議默認(rèn)值

-Xms2000m? 設(shè)置堆初始2G同Xmx,避免動(dòng)態(tài)調(diào)整疙驾,默認(rèn)空余堆內(nèi)存小于40%會(huì)調(diào)增大于70%會(huì)調(diào)小物理內(nèi)存的1/64

-Xmx2000m設(shè)置堆最大2G同Xms物理內(nèi)存的1/4

-Xss每個(gè)線程的棧大小無(wú)特殊不要超過(guò)默認(rèn)值凶伙,否則會(huì)影響線程數(shù)1M

-XX:NewRatio=4?年輕代(eden+2s):老年代=1:4若已設(shè)置xmn,不需設(shè)此參數(shù)它碎,另外選擇G1和ZGC不建議設(shè)此參數(shù)2

-XX:SurvivorRatio=82s:eden=1:8G1和ZGC動(dòng)態(tài)分配不建議設(shè)置此參數(shù)8

-XX:MaxGCPauseMillis=100允許的GC最大的暫停時(shí)間函荣,過(guò)小GC就會(huì)頻繁,過(guò)大暫停久太過(guò)頻繁或者暫停久可通過(guò)此參數(shù)調(diào)整200ms

-XX:+TieredCompilation使用分層編譯來(lái)提升啟動(dòng)速度默認(rèn)打開(kāi)true

-XX:CICompilerCount=N編譯線程的數(shù)目無(wú)需要不必調(diào)整4

-XX:-UseBiasedLocking 禁用偏向鎖在存在大量鎖對(duì)象的創(chuàng)建并高度并發(fā)的環(huán)境下禁用偏向鎖能夠帶來(lái)一定的性能優(yōu)化打開(kāi)

-XX:AutoBoxCacheMaxJDK默認(rèn)只緩存 -128 ~ +127的Integer 和 Long,此參數(shù)更改次值對(duì)于頻繁創(chuàng)建Integer對(duì)象的可使用此參數(shù)優(yōu)化128

-XX:+AlwaysPreTouchJAVA進(jìn)程啟動(dòng)的時(shí)候,雖然我們可以為JVM指定合適的內(nèi)存大小,但是這些內(nèi)存操作系統(tǒng)并沒(méi)有真正的分配給JVM,而是等JVM訪問(wèn)這些內(nèi)存的時(shí)候,才真正分配,這樣會(huì)造成以下問(wèn)題扳肛。

1傻挂、GC的時(shí)候,新生代的對(duì)象要晉升到老年代的時(shí)候,需要內(nèi)存,這個(gè)時(shí)候操作系統(tǒng)才真正分配內(nèi)存,這樣就會(huì)加大young gc的停頓時(shí)間;

2、可能存在內(nèi)存碎片的問(wèn)題挖息。

JVM就會(huì)先訪問(wèn)所有分配給它的內(nèi)存,讓操作系統(tǒng)把內(nèi)存真正的分配給JVM.后續(xù)JVM就可以順暢的訪問(wèn)內(nèi)存了金拒。

false

-XX:-OmitStackTraceInFastThrow拋出相同的異常N次之后,JVM會(huì)對(duì)某些特定異常如NPE進(jìn)行優(yōu)化套腹,不再帶異常棧绪抛。如日志里一條條Nul Point Exception不接收此操作,可以關(guān)閉true

-XX:+PrintGCApplicationStoppedTime除了打印清晰的完整的GC停頓時(shí)間外电禀,還可以打印其他的JVM停頓時(shí)間打開(kāi)false

-XX:+PrintPromotionFailure打開(kāi)了就知道是多大的新生代對(duì)象晉升到老生代失敗從而引發(fā)Fgc打開(kāi)false

比較通用的配置方案:

JVM_ARGS="-server -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Djava.io.tmpdir=/tmp -Djava.net.preferIPv6Addresses=false"

JVM_GC="-XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:InitiatingHeapOccupancyPercent=40 -XX:MaxGCPauseMillis=100? -XX:-UseBiasedLocking -XX:+PrintGCDetails -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCDateStamps -XX:+PrintStringTableStatistics -XX:+PrintAdaptiveSizePolicy -XX:+PrintGCApplicationStoppedTime -XX:+PrintFlagsFinal -XX:-UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M -Xloggc:$LOG_PATH/gc.log -XX:ErrorFile=$LOG_PATH/vmerr.log? -Xss512k -Xmx"$jvmSize" -Xms"$jvmSize" -XX:MetaspaceSize="$MaxMetaspaceSize" -XX:MaxMetaspaceSize="$MaxMetaspaceSize" -XX:+AlwaysPreTouch -XX:ReservedCodeCacheSize="$ReservedCodeCacheSize" -XX:InitialCodeCacheSize="$InitialCodeCacheSize" -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_PATH"

其中

case Using G1 GC

case 1G: Xms=512m MaxMetaspaceSize=64m ReservedCodeCacheSize=32m InitialCodeCacheSize=32m

case2G:? Xms=1g MaxMetaspaceSize=128m ReservedCodeCacheSize=64m InitialCodeCacheSize=64m

case4G:? Xms=2g MaxMetaspaceSize=256m ReservedCodeCacheSize=64m InitialCodeCacheSize=64m

case8G:? Xms=4g MaxMetaspaceSize=256m ReservedCodeCacheSize=128m InitialCodeCacheSize=128m

case16G:Xms=12g MaxMetaspaceSize=512m ReservedCodeCacheSize=256m InitialCodeCacheSize=256m

case22~28G:? Xms=18g MaxMetaspaceSize=512m ReservedCodeCacheSize=256m InitialCodeCacheSize=256m

case32~44G:? Xms=24g MaxMetaspaceSize=1g ReservedCodeCacheSize=512m InitialCodeCacheSize=512m

case64~88G:? Xms=32g MaxMetaspaceSize=2g ReservedCodeCacheSize=1g InitialCodeCacheSize=1g

四幢码、垃圾收集器對(duì)比

CMS和G1在上2章節(jié)已說(shuō)明。

簡(jiǎn)介新/老基于算法

簡(jiǎn)介新/老基于算法

Serial單線程尖飞,全程STW新生代復(fù)制

ParNewSerial的多線程版本新生代復(fù)制

Parallel Scavenge可以通過(guò)調(diào)整參數(shù)症副,控制停頓時(shí)間或最大的吞吐量新生代復(fù)制

Serial Old單線程,CMS和G1失敗采用此老年代標(biāo)記整理

Parallel Old可以通過(guò)調(diào)整參數(shù)政基,控制停頓時(shí)間或最大的吞吐量老年代標(biāo)記整理

五贞铣、關(guān)系圖


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沮明,隨后出現(xiàn)的幾起案子咕娄,更是在濱河造成了極大的恐慌,老刑警劉巖珊擂,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件圣勒,死亡現(xiàn)場(chǎng)離奇詭異费变,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)圣贸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)挚歧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吁峻,你說(shuō)我怎么就攤上這事滑负。” “怎么了用含?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵矮慕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我啄骇,道長(zhǎng)痴鳄,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任缸夹,我火速辦了婚禮痪寻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘虽惭。我一直安慰自己橡类,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布芽唇。 她就那樣靜靜地躺著顾画,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匆笤。 梳的紋絲不亂的頭發(fā)上研侣,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音疚膊,去河邊找鬼义辕。 笑死虾标,一個(gè)胖子當(dāng)著我的面吹牛寓盗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播璧函,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼傀蚌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蘸吓?” 一聲冷哼從身側(cè)響起善炫,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎库继,沒(méi)想到半個(gè)月后箩艺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體窜醉,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年艺谆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榨惰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡静汤,死狀恐怖琅催,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虫给,我是刑警寧澤藤抡,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站抹估,受9級(jí)特大地震影響缠黍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜棋蚌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一嫁佳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谷暮,春花似錦蒿往、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至颊埃,卻和暖如春蔬充,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背班利。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工饥漫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人罗标。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓庸队,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親闯割。 傳聞我的和親對(duì)象是個(gè)殘疾皇子彻消,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • Java 虛擬機(jī)有自己完善的硬件架構(gòu), 如處理器、堆棧宙拉、寄存器等宾尚,還具有相應(yīng)的指令系統(tǒng)。JVM 屏蔽了與具體操作系...
    尹小凱閱讀 1,687評(píng)論 0 10
  • 聲明:原創(chuàng)文章谢澈,轉(zhuǎn)載請(qǐng)注明出處煌贴。http://www.reibang.com/u/e02df63eaa87 垃圾收...
    唐影若凡閱讀 1,059評(píng)論 1 6
  • 目錄 一御板、背景 二、G1垃圾收集器特性 三牛郑、G1執(zhí)行步驟 四稳吮、G1基本參數(shù) 四、G1日志解釋 六井濒、基本原理 七灶似、...
    愛(ài)吃糖果閱讀 3,232評(píng)論 0 0
  • 1. 首先需要解決的問(wèn)題:哪些對(duì)象已經(jīng)死亡 1.1 引用計(jì)數(shù)算法 引用分析算法是這樣的: 給每一個(gè)對(duì)象添加一個(gè)引用...
    陌城小川閱讀 552評(píng)論 0 0
  • 轉(zhuǎn)載blog.csdn.net/ning109314/article/details/10411495/ JVM工...
    forever_smile閱讀 5,366評(píng)論 1 56