作者簡介:大家好,我是smart哥,前中興通訊、美團架構(gòu)師,現(xiàn)某互聯(lián)網(wǎng)公司CTO
聯(lián)系qq:184480602,加我進群,大家一起學(xué)習,一起進步,一起對抗互聯(lián)網(wǎng)寒冬
學(xué)習必須往深處挖,挖的越深,基礎(chǔ)越扎實!
階段1、深入多線程
階段2、深入多線程設(shè)計模式
階段3、深入juc源碼解析
階段4、深入jdk其余源碼解析
階段5、深入jvm源碼解析
一、簡介
在新生代和老年代進行垃圾回收的時候,都需要使用回收器進行回收,不同的JVM 垃圾回收器會有所不同,不同區(qū)域一般也采用不同的垃圾回收器。JVM常見的垃圾回收器有以下幾種,我們先來簡要看下,后續(xù)會針對每一種GC專門詳細講解:
Serial/Serial Old
Serial/Serial Old收集器是最基本也是最古老的垃圾收集器,它是一個單線程收集器,并且在它進行垃圾收集時,必須暫停所有用戶線程,也就是發(fā)生“Stop the World”。一般JVM都不再使用該收集器。
ParNew
ParNew收集器是Serial收集器的多線程版本。新生代并行回收,采用復(fù)制算法,老年代串行回收,采用標記整理算法。所以,該收集器一般只用于新生代。
CMS
CMS(Current Mark Sweep)收集器,目標是使回收停頓時間最短,也是多線程機制,采用標記整理算法,該回收器一般用于老年代,生產(chǎn)環(huán)境上也經(jīng)常會使用該垃圾回收器與其它GC搭配使用。
G1
G1最大的特點是沒有物理上的新生代和老年代,它們是邏輯的,G1將整個Java堆劃分為多個大小相等的獨立區(qū)域(Region),對新生代和老年代進行統(tǒng)一收集,并且采用了更加優(yōu)秀的算法和設(shè)計機制。
二、Stop the World
2.1 何謂Stop the World
上一節(jié),我們提到過JVM在進行垃圾回收時,會掛起除GC線程以外的所有其它線程,這就會導(dǎo)致系統(tǒng)出現(xiàn)卡頓,這就是JVM所謂的?Stop the World?機制。
假設(shè)當前JVM新生代的狀態(tài)如下,Eden區(qū)已被填滿,Survivor1區(qū)存放著上一次Minor GC后的存活對象,這時候即將觸發(fā)Minor GC,由垃圾回收線程使用垃圾回收器(新生代一般使用ParNew,采用復(fù)制算法),使用特定的垃圾回收算法進行回收,如下圖:
回收時,Eden區(qū)和Survivor1區(qū)的存活對象會被轉(zhuǎn)移到Survivor2區(qū),接著Eden和Survivor1中的垃圾對象都會被回收掉:
JVM在進行垃圾回收時,會讓我們的系統(tǒng)暫停,不再創(chuàng)建新的對象,同時讓GC線程盡快完成垃圾回收的工作——即標記和轉(zhuǎn)移存活對象:
一旦本輪GC結(jié)束,就可以恢復(fù)我們的系統(tǒng)程序,繼續(xù)在Eden區(qū)創(chuàng)建新的對象了,如下圖:
三、總結(jié)
上面就是?Stop the World?的整體流程,Stop the World會導(dǎo)致客戶端的請求出現(xiàn)卡頓,短則幾百毫秒,長則幾秒甚至幾分鐘。所以,無論是Minor GC還是Full GC,都要避免頻率過高,這也是使用JVM過程中最需要關(guān)注和優(yōu)化的地方。文章來源:http://www.zghlxwxcb.cn/news/detail-819265.html
從下一章開始,我們將詳細講解常見的三種垃圾回收器的工作原理,不同回收器?Stop the World?的流程也有所區(qū)別,GC的核心目標其實就是降低?Stop the World?的總體時間,這也是JVM不斷演化的終極思路。文章來源地址http://www.zghlxwxcb.cn/news/detail-819265.html
到了這里,關(guān)于JVM基礎(chǔ)(6)——JVM垃圾回收器簡介的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!