複製算法
)、serial old(用於年老代,採用標記/整理算法
)複製算法
)、Parallel Scavenge(用於新生代,採用複製算法
)、Parallel old(用於年老代,採用標記/整理算法
)標記/清除算法
)二者的主要區別:html
名稱 | 算法 | 內存區域 | 執行方式 | 執行過程 | 特色 | 適用場景 | 開啓參數 |
---|---|---|---|---|---|---|---|
Serial Garbage Collector | 複製算法 | 針對新生代設計 | 單線程、串行 | 當新生代內存不夠用時,先暫停所有用戶程序,而後開啓一條GC線程使用複製算法對垃圾進行回收,這一過程當中可能會有一些對象提高到年老代 | 因爲單線程運行,且整個GC階段都要暫停用戶程序,所以會形成應用程序停頓時間較長,但對於小規模的程序來講,卻很是適合。 | 平時的開發與調試程序使用,以及桌面應用交互程序。 | -XX:+UseSerialGC(client模式默認值) |
Serial Old Garbage Collector | 標記/整理算法 | 針對年老代設計 | 單線程、串行 | 同Serial Garbage Collector | 同Serial Garbage Collector | 同Serial Garbage Collector | - |
ParNew Garbage Collector | 複製算法 | 針對新生代設計 | 多線程、並行 | 開啓若干條GC線程使用複製算法並行進行垃圾回收,這一過程當中可能會有一些對象提高到年老代 | 有幾個處理器就會開幾個線程(不過線程數是可使用參數-XX:ParallelGCThreads=
|
在中到大型的堆上,且系統處理器至少多於一個的狀況。對於單個處理器來講,因爲並行執行的開銷(好比同步),ParNew的性能將會低於serial蒐集器。 | -XX:+UseParNewGC |
Parallel Scavenge Garbage Collector | 複製算法 | 針對新生代設計 | 並行 | 優先知足最大停頓時間的目標,次之是吞吐量,最後纔是新生代區域的最小值。 | 更精確的控制GC停頓時間以及吞吐量 | 適用場景 | 控制最大的停頓時間(使用-XX:MaxGCPauseMillis=
|
Parallel Old Garbage Collector | 標記/整理算法 | 年老代設計 | 並行蒐集器 | - | 它是除了serial old之外惟一一個能夠與parallel scavenge搭配工做的年老代蒐集器 | - | -XX:-UseParallelOldGC |
Concurrent Mark Sweep Garbage Collector | 標記/清除算法 | 年老代 | - | - | 應用程序與GC線程一塊兒工做 | - | - |
client模式下默認的垃圾收集器組合,可經過-XX:+UseSerialGC
強制開啓。很是適合運行於客戶端PC的小型應用程序,或者桌面應用程序(好比swing編寫的用戶界面程序),以及咱們平時的開發、調試、測試等。算法
開發、調試、測試共同的特色:多線程
這個組合是server模式下的默認組合(JDK6或JDK6以後),使用-XX:+UseParallelGC
參數強制開啓。併發
適用於一些須要長期運行且對吞吐量有必定要求的後臺程序。jvm
運行於後臺的程序都有如下特色:性能
它則是對響應時間(response time)要求較高的應用程序的首選,使用參數-XX:+UseConcMarkSweepGC
開啓。測試
新生代採用並行蒐集器優化
適用於一些須要長期運行且對相應時間有必定要求的後臺程序。線程
採用ParNew & CMS
組合的後臺應用程序,通常都對相應時間有必定要求,最典型的就是咱們的WEB應用程序
。設計
名稱 | 說明 | 備註 |
---|---|---|
UseSerialGC | 開啓此參數使用serial & serial old蒐集器(client模式默認值)。 | |
UseParNewGC | 開啓此參數使用ParNew & serial old蒐集器(不推薦)。 | |
UseConcMarkSweepGC | 開啓此參數使用ParNew & CMS(serial old爲替補)蒐集器。 | |
UseParallelGC | 開啓此參數使用parallel scavenge & parallel old蒐集器(server模式默認值)。 | |
UseParallelOldGC | 開啓此參數在年老代使用parallel old蒐集器(該參數在JDK1.5以後已無用)。 |
名稱 | 說明 | 備註 |
---|---|---|
Xms | 堆的初始值。默認爲物理內存的1/64,最大不超1G。 | |
Xmx | 堆的最大值。默認爲物理內存的1/4,最大不超1G。 | |
Xmn | 新生代的大小。 | |
Xss | 線程棧大小。 | |
PermSize | 永久代初始大小。默認爲物理內存的1/64,最大不超1G。 | |
MaxPermSize | 永久代最大值。默認爲物理內存的1/4,最大不超1G。 | |
NewRatio | 新生代與年老代的比例。好比爲3,則新生代佔堆的1/4,年老代佔3/4。 | |
SurvivorRatio | 新生代中調整eden區與survivor區的比例,默認爲8,即eden區爲80%的大小,兩個survivor分別爲10%的大小。 |
名稱 | 說明 | 備註 |
---|---|---|
PretenureSizeThreshold | 晉升年老代的對象大小。默認爲0,好比設爲10M,則超過10M的對象將不在eden區分配,而直接進入年老代。 | |
MaxTenuringThreshold | 晉升老年代的最大年齡。默認爲15,好比設爲10,則對象在10次普通GC後將會被放入年老代。 | |
DisableExplicitGC | 禁用System.gc()。 |
名稱 | 說明 | 備註 |
---|---|---|
ParallelGCThreads | 回收時開啓的線程數。默認與CPU個數相等。 | |
GCTimeRatio | 設置系統的吞吐量。好比設爲99,則GC時間比爲1/1+99=1%,也就是要求吞吐量爲99%。若沒法知足會縮小新生代大小。 | |
MaxGCPauseMillis | 設置垃圾回收的最大停頓時間。若沒法知足設置值,則會優先縮小新生代大小,仍沒法知足的話則會犧牲吞吐量。 |
名稱 | 說明 | 備註 |
---|---|---|
CMSInitiatingOccupancyFraction | 觸發CMS收集器的內存比例。好比60%的意思就是說,當內存達到60%,就會開始進行CMS併發收集。 | |
UseCMSCompactAtFullCollection | 在每一次CMS收集器清理垃圾後送一次內存整理。 | |
CMSFullGCsBeforeCompaction | 設置在幾回CMS垃圾收集後,觸發一次內存整理。 |
整理自: