1串行(单线程)
serial(新生代)+serialold(老年代)
一个线程在垃圾回收时,其他线程要阻塞
2吞吐量优先(多线程)
单位时间内,让stw时间最短
parallel+parallelold
有几个cpu核,就有几个线程在进行垃圾回收,在垃圾回收时,cpu利用率很高。但是,不能有用户线程在工作。
3响应时间优先(多线程)
垃圾回收时,让单次stop the world 时间变短
ConcMarkSweep+ParNew或者serialOld
可以让用户线程和垃圾回收线程并发,不需要STW(CMS)。使用的是标记清除算法,这样会产生空间碎片,内存不足,这样CMS可能会失败。如果失败了(垃圾回收时间会变很长),CMS会变化成为SerailOld。
CMS线程工作过程:初始标记,并发标记,重新标记,并发清理。
补充:垃圾回收过程中,对象内存地址对发生改变,为了不让线程出错,就会stw。