最常用的新生代垃圾回收器ParNew
假设没有最新的G1垃圾回收器的话,通常大家线上系统都是ParNew垃圾回收器作为新生代的垃圾回收器,当然现在即使有了G1,其实很多线上系统还是用的ParNew。
新生代的ParNew垃圾回收器主打的就是多线程垃圾回收机制,另外一种Serial垃圾回收器主打的是单线程垃圾回收,他们俩都是回收新生代的,唯一的区别就是单线程和多线程的区别,但是垃圾回收算法是完全一样的。
ParNew垃圾回收器如果一旦在合适的时机执行Minor GC的时候,就会把系统程序的工作线程全部停掉,禁止程序继续运行创建新的对象,然后自己就用多个垃圾回收线程去进行垃圾回收,回收的机制和算法就跟之前说的是一样的。
如何为线上系统指定使用ParNew垃圾回收器
在启动系统的时候如果要指定使用ParNew垃圾回收器,是用什么参数呢?
使用“-XX:+UseParNewGC”选项,只要加入这个选项,JVM启动之后对新生代进行垃圾回收的,就是ParNew垃圾回收器了。
那么Minor GC的时机,检查机制,包括垃圾回收的具体过程,以及对象升入老年代的机制都是之前那一套,只不过ParNew会使用多个线程来进行垃圾回收。
ParNew垃圾回收器默认情况下的线程数量
因为现在一般部署系统的服务器都是多核CPU的,所以为了在垃圾回收的时候充分利用多核CPU的资源,一旦指定了使用ParNew垃圾回收器之后,就默认给自己设置的垃圾回收线程的数量就是跟CPU的核数是一样的。
如果要自己调节ParNew的垃圾回收线程数量,使用“-XX:ParallelGCThreads”参数即可,通过他可以设置线程的数量。