③. Serial、SerialOld 回收器:串行回收(了解)
①. Serial收集器采用复制算法、串行回收和"Stop一 the一World"机制的方式执行内存回收
②. Serial 0ld收集器同样也采用了串行回收 和"Stop the World"机制,只不过内存回收算法使用的是标记一压缩算法
③. 单线程回收:使用一个cpu或一条线程去完成垃圾收集工作 | 必须暂停其他所有的工作线程
④. 使用 -XX: +UseSerialGC 参数可以指定年轻代和老年代都使用串行收集器
等价于新生代用Serial GC,且老年代用Serial 0ld GC
控制台输出:
-XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4294967296 -
XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseSerialGC
④. ParNew回收器:并行回收(了解)
①. 如果说Serial GC是年轻代中的单线程垃圾收集器,那么ParNew收集器则是Serial收集器的多线程版本
②. ParNew收集器除了采用并行回收的方式执行内存回收外,两款垃圾收集器之间几乎没有任何区别。ParNew收集器在年轻代中同样也是采用复制算法、"Stop一 the一World"机制
③. 因为除Serial外,目前只有ParNew GC能与CMS收集器配合工作
④. 在程序中,开发人员可以通过选项"-XX:+UseParNewGC"手动指定使用.ParNew收集器执行内存回收任务。它表示年轻代使用并行收集器, 不影响老年代
⑤. -XX:ParallelGCThreads 限制线程数量,默认开启和CPU数据相同的线程数。
⑥. SerialGC 和 ParNewGC哪个更好?
ParNew 收集器运行在多CPU的环境下,由于可以充分利用多CPU、多核心等物理硬件资源优势,可以更快速地完成垃圾收集,提升程序的吞吐量
但是在单个CPU的环境下,ParNew收集器不比Serial 收集器更高效。虽然Serial收集器是基于串行回收,但是由于CPU不需要频繁地做任务切换,因此可以有效避免多线程交互过程中产生的一些额外开销