DefNew——Default New Generation算法
Tenured——Serial Oldwindows
ParNew——Parallel New Generation服务器
PSYoungGen——Parallel Scavenge多线程
ParOldGen——Parallel Old Generation并发
适用范围:只须要掌握Server模式,Client模式基本不会用。性能
操做系统:32位windows不论硬件如何默认使用Client模式。32位其余OS,2G内存同时2个CPU以上用Server模式,低于该配置是Client模式。64位只有Server模式。网站
串行收集器是最古老的,最稳定,效率高的收集器,只使用一个线程去回收但其进行垃圾回收过程当中可能会产生较长的停顿。虽然在收集垃圾的过程当中须要暂停其余的工做线程,可是简单高效,对于单CPU环境来讲,没有线程交互的开销能够得到最高的单线程垃圾收集效率,所以Serial垃圾回收器依然是Java虚拟机运行在Client模式下默认的新生代垃圾回收器。spa
开启串行收集器的JVM参数是-XX:+UseSerialGC。操作系统
开启后会使用:Serial(Young区)+ Serial Old(Old区)的收集器组合。表示新生代、老年代都会使用串行回收收集器,新生代用复制算法,老年代用标记整理算法。线程
显式激活垃圾回收器:
使用多线程进行垃圾回收,在垃圾回收时,会暂停全部其余工做线程,直到GC结束。
ParNew时Serial收集器新生代的并行多线程版本,最多见的应用场景是配合老年代CMS GC工做,其他行为和Seria收集器彻底同样,ParNew垃圾收集器在垃圾收集过程当中一样要暂停全部其余的工做线程。它是不少JVM运行在Server模式下新生代的默认垃圾收集器。
开启串行收集器的JVM参数是-XX:+UseParNewGC。
启用ParNew收集器,只影响新生代的收集(新生代GC频繁),不影响老年代。开启参数后,会使用ParNew(Young区)+Serial(Old区)的收集器组合。新生代使用复制算法,老年代使用标记整理算法。
ParNew+Tenured(Serial Old)再也不推荐使用:
Parallel Scavenge收集器相似ParNew,也是一个新生代垃圾收集器,使用复制算法,也是一个并行的多线程的垃圾收集器,俗称吞吐量优先收集器。至关因而串行收集器在新生代和老年代的并行化。
它重点关注可控制吞吐量,高吞吐量意味着高效利用CPU时间,它多用于在后台运算而不须要太多交互的任务。【吞吐量 = 用户代码运行时间/(用户代码运行时间+垃圾回收时间)】
自适应调节策略也是Parallel Scavenge收集器与ParNew收集器的一个重要区别。自适应调节策略就是JVM会根据当前系统的运行状况看收集性能监控信息,动态调整这些参数以提供最合适的停顿时间(-XX: MaxGCPauseMills)或最大吞吐量。
经常使用的JVM参数:-XX:+UseParallelGC 或者 +UseParallelOldGC(两者能够互相激活),使用Parallel Scavenge收集器。开启参数后,新生代用复制算法,老年代用复制标记整理算法。
参数-XX:+ParallelGCThread = K 表示启动K个GC线程【CPU > 8 K = 5或8 CPU < 8 K = 实际个数】
Parallel Old收集器是Parallel Scavenge收集器的老年代版本,使用多线程的标记整理算法,在JDK1.6开始提供。
JDK1.6以前,新生代使用Parallel Scavenge收集器只能搭配老年代Serial Old收集器,只能保证新生代的吞吐量优先,没法保证总体的吞吐量。在JDK1.6以前,是Parallel Scavenge+Serial Old。
Parallel Old是为了老年代一样提供吞吐量优先的垃圾收集器,若是系统对吞吐量要求较高,JDK1.8后优先考虑新生代Parallel Scavenge和老年代 Parallel Old的搭配策列。在JDK1.8及以后,是Parallel Scavenge+Parallel Old。
JVM经常使用参数:-XX:+UseParallelOldGC使用Parallel Old收集器。和上一个part的截图是一致的,UseParallelGC和UseParallelOldGC能够互相激活。
CMS收集器是一个以获取最短回收停顿时间为目标的收集器。适合应用在互联网站或BS系统的服务器上,由于这类场景重视服务器的响应速度,但愿系统的停顿时间尽量短。CMS适合堆内存大、CPU核数多的服务器端应用,也是G1出现以前大型应用的首选收集器。
CMS的优点是并发收集停顿少,并发是指与用户线程一块儿执行。
开启收集器的JVM参数:-XX:+UseConcMarkSweepGC 开启后会自动开启 -XX:+UseParNewGC
并发标记清除收集器的组合:ParNew + CMS + Serial Old(做为CMS出错的后备收集器,加强健壮性)
CMS内存回收一共有4个过程:
优势:并发收集,停顿次数少。
缺点:对CPU的压力大,CMS在收集和应用线程会同时增长对堆内存的占用,也就是i说CMS必须在老年代堆内存用完以前完成GC,不然CMS会回收失败,将触发担保机制,Serial Old会以STW(Stop The World,暂停全部工做线程)的方式进行依次GC,从而形成较大的停顿时间。并且采用标记清除算法会产生内存碎片。
Serial Old收集器是Serial垃圾收集器老年代版本,一样是单线程的收集器,使用标记整理算法。
主要运行在Client默认的JVM老年代垃圾回收器。
在Server模式下,主要有两个用途:
内容较多,见【JVM】垃圾回收器总结(3)