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个阶段:
- 初始标记阶段: STW只标记出与根对象直接引用的对象
- 并发标记:继续标记其他对象,与应用程序是并发执行
- 重新标记:STW对并发执行阶段的对象进行重新标记
- 并发清除:并行,将产生的垃圾清除。清除过程中,应用程序会产生新的垃圾,叫做浮动垃圾,将会留到下一次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