- Serial(串行回收)
一个线程,会暂停用户线程 - Parallel(并行回收 java8默认使用)
- 多个垃圾收集线程并行工作,用户线程暂停
- 前两者 都会 stop the world
- CMS(并发标记清除算法)用来收集老年代
-
用户线程和垃圾收集器同时执行(不一定并行.可能交替)
初始标记(gcroot检测)(会暂停) 并发标记 重新标记(再标记一次) 并发清除(和用户线程一起) 优点:极大减少了停顿时间 缺点:耗费cpu,必须在老年代堆内存用完前进行回收,否则CMS回收失败时候会触发担保机制,使用串行垃圾收集器
- G1 (老年代和新生代都回收)
将eden,survivor,和old区域变得不再连续,将他们打散
避免了全内存扫描
将堆内存的物理空间划分取消了,将堆划分成32个区域,
JAVA12又增加了ZGC