1、新生代:
Serial 收集器是最悠久的收集器。单线程,在进行垃圾收集是,必须暂停其他所有的工作线程。
ParNew收集器是Serial的多线程版本。
Parallel Scavenge 收集器是一个新生代收集器。 目的是到达一个可控制的吞吐量,即cpu运行用户代码的时间和cpu总消耗内存的时间,高效的吞吐量可以高效率的使用cpu时间,尽快完成程序的运算任务。只要适合后台运算而不需要太多交互的任务。
2、老年代:
Serial Old 是Serial的老年代版本,主要意义是在于给client模式下的虚拟机使用。
Parallel Old 是Parallel Scavenger的老年代版本 jdk1.6才开始使用。
CMS 以获取最短回收停顿时间为目标的收集器。
明显的缺点:对CPU资源很敏感,在少量cpu的情况下,执行速度会很低。
大量的碎片。
3、G1 收集器 面向服务端的垃圾收集器。淡化了新生代和老年代
特点:并发并行,分代收集,空间整合,预测停顿时间模型
JDK1.7 垃圾收集器参数总结:
参数 |
描述 |
UseSerialGC |
虚拟机运行在Client模式下的默认值,打开此开关后,使用Serial+Serial Old 的收集器组合进行内存回收。 |
UseParNewGc
|
打开此开关后,使用ParNew+Serial Old的收集器组合进行内存回收 |
UseConcMarkSweepGC |
打开此开关后使用ParNew+CMS+Serial Old的收集器组合进行内存回收,Serial Old收集器将最为CMS收集器出现Concurrent Mode Failure失败后的后备收集器使用 |
UseParallelOldGC
|
使用 Parallel+parallel Old的收集器组合进行内存回收 |
SurvivorRatio |
新生代中Eden区域与Survivor区域的容量比值,默认为8代表Eden:Suvivor-8:1 |
PretenureSizeThreshold |
直接晋升到老年代的对象大小,设置参数后,大雨这个参数的对象将直接在老年代分配 |
MaxTenuringThreshold |
晋升到老年代的对象年龄,每个对象在坚持过一次Minor GC之后,年龄就增加1,当超过这个参数值时就进入老年代 |
UseAdaptiveSizePolicy
|
动态调整java堆中各个区域的大小以及进入老年代的年龄 |
HandlePrommotionFailure |
是否允许分配担保失败,即老年代的剩余空间不足一应付新生代的整个Eden和Survivor区的所有对象都存活的极端情况 |
ParallelGCThreads |
设置并行GC时内存回收的线程数 |
GCTimeRatio |
GC时间占总时间的比率,默认为99,即允许1%的GC时间,仅在使用Parallel Scavenge收集器时生效 |
MaxGCpauseMillis |
设置GC的最大停顿时间,仅在使用Parallel Scavenge收集器时生效 |
CMSInitiatingOccupanyFraction |
设置GC收集器在老年代空间被使用多少后触发垃圾回收,默认值为68%仅在使用CM收集器时奏效 |
UseCMSCompactAtFullCollection |
设置CMS收集器再完成一次垃圾回收后是否进行一次内存碎片整理,仅在使用CMS时生效 |
CSMFullGcsBeforeCompaction |
设置CMS收集器在进行若干手机后在启动一次内存碎片整理,仅在使用cms收集器时生效 |
我们可是使用可视化工具来查看,当前使用的收集器