Serial 收集器(单核服务器,最快,单线程版本)
串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法、老年代标记-压缩;垃圾收集 的过程中会 Stop The World(服务暂停)
算法:复制算法,标志整理
算法的缺点就是:在垃圾回收的时候,会停止其他的线程
ParNew收集器(多线程版本)
ParNew 收集器其实就是 Serial 收集器的多线程版本。 算法和Serial一致
CMS收集器(多线程)
CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。目 前很大一部分的 Java应用都集中在互联网站或 B/S 系统的服务端上,这类应用尤其重视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。并发收集、低停顿,产生大量的空间碎片,并发节点吞吐率低。
算法:标记清理
G1收集器(多线程)
空间整合:G1 收集器采用标记整理算法,不会产生内存空间碎片。分配大对象时不会因为无法找到连续空间而提前触发下一次 GC。
可预测的停顿: G1 除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为 N 毫秒的时间片段内。它将整个 Java 堆划分为多个大 小相等的独立区域(Region),触发垃圾回收,那些没有使用region仍然可以对外提供使用,就有效的避免了stop the world。
参数设置
-XX:+SurvivorRatio:设置 eden 区大小和 survivor 区大小的比例。
-XX:+PretenureSizeThreshold:设置大对象直接进入老年代的阈值。当对象的大小超过这个值时,将直接在老年代分配。
-XX:MaxTenuringThreshold:设置对象进入老年代的年龄的最大值。每一次 Minor GC 后,对象年龄就加 1。任何大于这个年龄的对象,一定会进入老年代。
-XX:+ParallelCMSThreads: 设定 CMS 的线程数量。
-XX:+MaxGCPauseMills:设置G1最大垃圾收集停顿时间。
-XX:+GCPauseIntervalMills:设置G1停顿间隔时间。