- 1.如何查看默认的垃圾回收器
java -XX:+PrintCommandLineFlags -version 最后一个参数
简写英文术语展开
新生代
- 1.串行收集器:Serial收集器
单线程的收集器,在进行垃圾收集时候,必须暂停其它所有的工作线程,直到它收集结束
- 2.ParNew(并行)收集器
使用多线程进行垃圾回收,在垃圾收集时,会Stop-the-World暂停其它所有工作线程直到它收集结束
ParNew收集器其实是Serial收集器新生代的并行多线程版本,最常见的应用场景是配合老年代的CMS GC工作,其余的行为和Serial收集器完成一样,ParNew垃圾收集器子啊来收集过程中同样也要暂停所有其它的工作线程.它是很多java虚拟机运行在Server模式下新生代的默认垃圾回收器
常用对用JVM参数:-XX:+UseParNewGC 启用ParNew收集器,只影响新生代的收集,不影响老年代,开启上述参数后,会使用:ParNew(young区用)+Serial Old的收集器组合,新生代使用复制算法,老年代使用标记-整理算法
java8已不推荐使用
- 3.并行收集器
Parallel Scavenge收集器类似ParNew也是一个新生代垃圾回收器,使用复制算法,俗称吞吐量优先收集器。一句话:Serial收集器在新生代与老年代的并行化
它关注的是:
**可控制的吞吐量(Thoughput=运行用户代码时间/(运行用户代码时间+垃圾收集时间)),**也即比如程序运行100min,垃圾收集时间1min,吞吐量是99%,高吞吐量意味着搞笑利用CPU时间,多用于后台运算而不需要太多交互的任务.
自适应调节策略是ParallelScavenge收集器与ParNew收集器的一个重要区别,动态调整这些参数以提供最合适的停顿时间(-XX:MaxGCPauseMills)或最大的吞吐量
常用JVM参数:**-XX:+UseParallelGC或-XX:+UseParallelOldGC(可互相激活)**使用Parallel Scanvenge收集器
Parallel Old是Parallel Scanvenge的老年代版本
- 4.CMS收集器
(Concurrent Mark Sweep:并发标记清除),是一种以获取最短回收停顿时间为目标的收集器
适合应用在互联网站或者B/S系统的服务器上,这类应用尤其重视服务器的响应速度,希望系统停顿时间最短.CMS非常适合堆内存大、CPU核数多的服务器应用,也是G1出现之前大型应用首选收集器.
并发标记清除,并发收集低停顿,并发指的是与用户线程一起执行.
- 5.G1收集器
如何选择垃圾收集器
单CPU或小内存,单机程序 =====> -XX:+UseSerialGC
多CPU,需要最大吞吐量,如后台计算型应用 =======>
-XX:UseParallelGC 或者
-XX:UseParallelOldGC
多CPU,追求低停顿时间,需快速响应如互联网应用
-XX:+UseConcMarkSweepGC
-XX:+ParNewGC