Java面试 – JVM有哪些垃圾回收器?什么是STW?什么是三色标记?

STW:stop-the-world

是在垃圾回收算法执行过程当中,需要将JVM内存冻结的一种状态。在STW下,java的所有线程都是停止执行的,GC线程除外,native方法也可以执行,但是不能与JVM交互。GC算法的重点就是减少STW,同是也是JVM调做强的重点。

 

JVM垃圾回收器:

分代算法:

新生代:Serial,ParNew,Parallel Scavenge

老年代:CMS,Serial Old,ParallelOld

不分代算法:

Epsilon,G1,ZGC,shennandoah

JDK 1.8默认回收器:PS+PO

CMS: Concurrent Mark Sweep,让用户线程与STW并发执行

核心思想就是将STW分散,让GC线程与用户线程并发执行,分为4个阶段:

  1. 初始标记阶段: STW只标记出与根对象直接引用的对象
  2. 并发标记:继续标记其他对象,与应用程序是并发执行
  3. 重新标记:STW对并发执行阶段的对象进行重新标记
  4. 并发清除:并行,将产生的垃圾清除。清除过程中,应用程序会产生新的垃圾,叫做浮动垃圾,将会留到下一次GC清除

G1:Garbage First 垃圾优先

G1的内存模型,对堆内存不分老年代和新生代,而是划分成一个个的小内存块,叫做Region。每个Region可在逻辑上以隶属于不同的年代。

G1的GC过程为4个阶段:

1.初始标记

2.标记Region,通过RSet标记出上一个阶段标记的Region引用 到的Old区Region

3.并发标记阶段:中CMS的步骤并不多,遍历的颐泛围不再是整个Old区,而是第二步标记出的Region

4.重新标记:和CMS的重新标记过程差不多

5.垃圾清理:与CMS不同的是,G1可以采用拷贝算法,直接将整个Region中的对象拷贝到另一个Region。而这个阶段,G1只选择垃圾较多的Region来清理

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享