JVM垃圾收集器-創(chuàng)新互聯(lián)

如果說垃圾收集算法是內(nèi)存回收的方法論,那么垃圾收集器就是內(nèi)存回收的具體實(shí)現(xiàn),這里討論一下基于JDK1.7 之后的HotSpot 虛擬機(jī)所包含的垃圾收集器,先來一張圖:
JVM垃圾收集器

創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元綦江做網(wǎng)站,已為上家服務(wù),為綦江各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

這張圖中兩個(gè)收集器之間存在的連線,就說明他們可以搭配使用,虛擬機(jī)所處的區(qū)域,則表示他是屬于新生代收集器還是老年代
收集器。

從JDK1.3之前都在用Serial收集器,一直到現(xiàn)在JDK 1.7,HotSpot 虛擬機(jī)開發(fā)團(tuán)隊(duì)為消除或者減少工作線程因內(nèi)存回收兒導(dǎo)致停頓的努力一在進(jìn)行著,從Serial收集器到Parallel收集器
再到ConcurrentMarkSweep (CMS ) 乃至GC收集器最前沿的成果Garbage First (G1) 收集器,一直致力于用戶線程的停頓時(shí)間不短縮短,但是依舊沒有辦法完全消除。

1.  Serial 收集器
                Serial 收集器是最基本,發(fā)展歷史最悠久的收集器,曾經(jīng)在JDK1.3之前是虛擬機(jī)新生代收集的唯
一選擇。他是一個(gè)單線程的收集器,在他進(jìn)行垃圾收集的時(shí)候,必須暫停其他所有的工作線程,直到它收集結(jié)束。
Stop The World 是對(duì)它的一個(gè)最好的描述了,下圖是Serial收集器的運(yùn)行過程:

JVM垃圾收集器

但是他依然是虛擬機(jī)在Client模式下的默認(rèn)新生代收集器,他也有著優(yōu)于其他收集器的地方:簡(jiǎn)單而高效(與其他單線程的收集器相比) ,對(duì)于限定單個(gè)CPU的環(huán)境來說,Serial收集器由于沒有線程
交互的開銷,自然可以提高單線程收集效率。所以Serial收集器對(duì)于運(yùn)行在Client模式下的虛擬機(jī)來說是一個(gè)很好的選擇。

2. PraNew收集器

他是Serial收集器的多線程版本,除了使用多線程進(jìn)行垃圾收集之外,其余包括收集算法,Stop The World ,對(duì)象分配規(guī)則,回收策略等都與Serial 收集器完全一樣。
下圖是PraNew收集器的工作過程:
JVM垃圾收集器
目前只有它能和CMS收集器配合工作,ParNew 收集器也是使用-XX:+UseConcMarkSweepGC 選項(xiàng)后的默認(rèn)新生代收集器,也可以使用-XX:UsePraNewGC選項(xiàng)強(qiáng)制指定他。
他默認(rèn)開啟的收集線程數(shù)量與CPU的數(shù)量相同,在CPU非常多的環(huán)境下,可以使用-XX:ParallelGCThreads參數(shù)來限制垃圾收集的線程數(shù)。

3. Parallel Scavenge 收集器

Parallel Scavenge 收集器是一個(gè)新生代收集器,他也是使用復(fù)制算法的收集器,又是并行的多線程收集器。Parallel Scavenge 收集器的特點(diǎn)是他的兩個(gè)關(guān)注點(diǎn)與其他的收集器不同
,CMS收集器關(guān)注點(diǎn)是盡可能縮短卡機(jī)收集器時(shí)候,用戶線程的停頓時(shí)間,而Parallel Scavenge 收集器的目的是達(dá)到一個(gè)可控制的吞吐量。
吞吐量=運(yùn)行用戶代碼時(shí)間/(運(yùn)行用戶代碼時(shí)間+垃圾收集時(shí)間)
主要適合在后臺(tái)運(yùn)算而不需要太多交互的任務(wù)。
Parallel Scavenge 收集器提供了兩個(gè)參數(shù)用于精確控制吞吐量,分別是:控制大垃圾收集停頓的時(shí)間(-XX:MaxGCPauseMilis)參數(shù)以及直接設(shè)置吞吐量大?。?XXGCTimeRatio)參數(shù)
不過大家不要認(rèn)為如果把“大垃圾收集停頓的時(shí)間”參數(shù)設(shè)置小一點(diǎn)就可以使得垃圾收集速度變得更快,GC停頓時(shí)間縮短是以犧牲吞吐量和新生代空間來換取的。

4.Serial Old 收集器

Serial Old 是Serial收集器的老年代版本,他同樣是個(gè)單線程收集器,使用“標(biāo)記整理”算法。這個(gè)收集器的主要意義也是給Client模式下的虛擬機(jī)使用。
Serial Old 收集器的運(yùn)行示意圖如下:
JVM垃圾收集器

5. Parallel Old 收集器

Parallel Old 是Parallel Scavenge收集器的老年代版本,使用多線程和“標(biāo)記-整理”算法。他是在JDK1.6才開始提供的,在此之前,新生代的Parallel Scavenge收集器一直處于
比較尷尬的狀態(tài),原因是,如果新生代選擇了Parallel Scavenge 收集器,老年代除了Serial Old 收集器之外別無選擇。由于老年代Serial Old 收集器在服務(wù)端應(yīng)用性能上的“拖累"
使用了Parallel Scavenge 收集器也未必能在整體應(yīng)用上 獲得吞吐量大的效果,由于單線程的老年代收集中無法充分利用服務(wù)器多CPU的處理能力,在老年代很大而且硬件
比較高級(jí)的環(huán)境中,這種組合的吞吐量甚至還不一定有ParNew 加上CMS的組合給力。直到Parallel Old 收集器出現(xiàn)后,吞吐量有線收集器終于有了名副其實(shí)的組合,在注重吞吐量以及
CPU資源敏感的場(chǎng)合,都可以有線考慮Parallel Scavenge 加Parallel Old 收集器,Parallel Old 收集器工作過程如圖:
JVM垃圾收集器

6. CMS 收集器

CMS(Concurrent Mark Sweep) 收集器是一種以獲最短回收停頓時(shí)間為目標(biāo)的收集器。從名字(Mark Sweep )上就可以看出,CMS 是基于“標(biāo)記-清除”算法 實(shí)現(xiàn)的,他的運(yùn)作過程相對(duì)于
前面幾種收集器來說更復(fù)雜一些,整個(gè)過程分為4個(gè)步驟:

  • 初始標(biāo)記(CMS initial mark)
  • 并發(fā)標(biāo)記(CMS concurrent mark)
  • 重新標(biāo)記(CMS remark)
  • 并發(fā)清除(CMS concurrent sweep)

其中,初始標(biāo)記,重新標(biāo)記這兩個(gè)步驟“Stop The World”。 初始標(biāo)記僅僅只是標(biāo)記一下GC Roots 能直接關(guān)聯(lián)到的對(duì)象,速度很快,并發(fā)標(biāo)記階段就是進(jìn)行
GC Roots Trcing的過程,而重新標(biāo)記階段則是為了修正并發(fā)標(biāo)記期間因用戶程序繼續(xù)運(yùn)作而導(dǎo)致標(biāo)記產(chǎn)生變動(dòng)的那一部分對(duì)象的標(biāo)記記錄,這個(gè)階段的停頓時(shí)間一般
會(huì)比初始標(biāo)記階段稍長一些,但是比并發(fā)標(biāo)記的時(shí)間短。CMS 收集器運(yùn)行示意圖如下:

JVM垃圾收集器

7. G1 收集器

G1 是一款面向服務(wù)端應(yīng)用的垃圾收集器,HotSpot 開發(fā)團(tuán)隊(duì)賦予他的使命是未來可以替換JDK1.5中的CMS收集器,G1 具備以下特點(diǎn):

  • 并行與并發(fā):G1 能充分利用多CPU,多核環(huán)境下的硬件優(yōu)勢(shì),使用多個(gè)CPU來縮短Stop The World 停頓的
    時(shí)間部分其他收集器原本需要停頓Java線程執(zhí)行的GC動(dòng)作,G1收集器仍然可以通過并發(fā)的方式讓Java程序繼
    續(xù)執(zhí)行。

    • 分代收集:他能夠采用不同的方式去處理新創(chuàng)建的對(duì)象和已經(jīng)存活了一段時(shí)間,熬過多次GC的就對(duì)象以獲取
      更好的收集效果。
    • 空間整合:與CMS的標(biāo)記清除算法不同,G1從整體看來是基于 標(biāo)記-整理算法實(shí)現(xiàn)的,但從局部看來基于復(fù)
      制算法實(shí)現(xiàn)的。但無論如何,這兩種算法都意味著G1運(yùn)作期間不會(huì)產(chǎn)生內(nèi)存空間碎片,手機(jī)后能提供規(guī)整的
      可用內(nèi)存。
    • 可預(yù)測(cè)的停頓:G1 還能建立可預(yù)測(cè)的停頓時(shí)間模型,能讓使用者明確指定在一個(gè)長度為M毫秒的時(shí)間片段內(nèi),
      消耗在垃圾收集上的時(shí)間不得超過N毫秒。

      G1 收集器運(yùn)行示意圖如下:

JVM垃圾收集器

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞名稱:JVM垃圾收集器-創(chuàng)新互聯(lián)
文章路徑:http://bm7419.com/article16/cdeegg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、Google、外貿(mào)建站、企業(yè)建站、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司