天天看点

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. 可预测的停顿

运行方式:初始标记,并发标记,最终标记,筛选回收

继续阅读