ParNew回收器是如何工作的

通过JVM参数-XX:useParNewGC我们可以指定新生代的垃圾回收器为ParNew,当我们指定垃圾回收器为ParNew后,默认它的回收线程和CPU核数一样,当然我们也可以通过JVM参数“-XX:ParallelGCThreads来指定ParNew的线程数(一般不设置)

在多核环境下,ParNew收集器在GC时会开启多个GC线程来进行垃圾回收,提高回收的效率

到底是用单线程回收还是多线程回收?到底是serial回收器还是parNew回收器?

首先我们要了解JVM的启动模式,它分为两种

  • server
  • client

一般情况下,如果是纯后端系统,那么都会用server模式来启动,在server模式下,是支持多核CPU同时运行的,因此在这种情况下,我们使用多线程回收器会提高垃圾回收的效率

但是如果你的系统是一个用Java写的客户端系统,那么就需要用client模式来启动,在client模式下,只支持线程运行,在这种情况下,如果你还用多线程收集器,那么就会导致多个垃圾回收线程之间频繁发生上下文切换,抢占时间片等状况,因此此时应该使用单线程回收,也就是使用serial来进行垃圾回收