天天看點

JVM 關于JVM中的幾個垃圾回收器(面試題)

Serial收集器

這個收集器是一個單線程的收集器,但它的單線程的意義不僅僅說明它會隻使用一個COU或一條收集線程去完成垃圾收集工作,更重要的是它在進行垃圾收集時,必須暫停其他所有的工作線程,直到它收集結束

ParNew收集器

Serial的多線程版,其餘行為和其一緻.

并行:多條垃圾收集線程并行工作,使用者線程等待

并發:使用者線程和垃圾收集線程一起執行.

Parallel Scavenge

新生代收集器,使用複制算法,又是并行的多線程收集器

吞吐量:CPU用于使用者代碼的時間和總消耗時間的比例.吞吐量=運作使用者代碼時間/(運作代碼時間+回收垃圾時間)

Serial old收集器

serial的老年代版本,單線程,标記整理算法.

Parallel old收集器

Parallel Scavenge的老年代版本,多線程和标記整理算法.

CMS收集器

CMS并非沒有暫停,而是兩個短暫停來替代串行标記整理算法的長暫停,周期為:

初始标記 > 并發标記 > 重新标記 > 并發清除 > 并發重設狀态等待下次CMS的觸發

1.3步需要暫停所有應用程式線程.

第一次暫停從root對象開始标記存活的對象,初始标記;

第二次暫停是在并發标記之後,暫停所有應用程式線程,重新标記并發标記階段遺漏的對象(在并發标記階段結束後對象狀态的更新導緻),第一次暫停會比較短,第二次一般會比較長.并且重新标記這個階段可以并行标記.

而上面的這三個并發是指一個或多個垃圾回收線程和應用程式并發地運作,垃圾回收器不會暫停應用程式的執行.

重新标記這個階段的并行是指暫停所有應用程式後,啟動一定數量的垃圾回收器回收線程進行并行标記.

CMS收集器是基于标記清除算法實作的,四個步驟:1.初始标記,2.并發标記,3.重新标記,4.并發清除

優點:并發收集,低停頓

缺點:對CPU資源非常敏感,預設啟動回收線程為(CPU數+3)/4;

無法收集浮動垃圾,可能會出現Failure失敗而導緻一次Full GC地産生;

是基于标記清除算法實作的.

G1收集器

它是一款面向伺服器應用的垃圾回收器

  1. 并行與并發:利用多CPU縮短STOP-The-World停頓時間
  2. 分帶收集
  3. 空間整合:不會産生記憶體碎片
  4. 可預測的停頓

運作方式:初始标記,并發标記,最終标記,篩選回收

繼續閱讀