美文网首页
垃圾收集器

垃圾收集器

作者: 谁说咖啡不苦 | 来源:发表于2019-05-07 21:40 被阅读0次
  • 串行收集器Serial: Serial、Serial Old.
  • 并行收集器Parallel: Parallel Scavenge、Parallel Old,主要优势吞吐量大
  • 并发收集器Concurrent: CMS、G1,主要优势停顿时间短

  • 停顿时间: 垃圾收集器做垃圾回收中断应用执行的时间。可以通过参数: -XX:MaxGCPauseMillis来设置
  • 吞吐量: 花在垃圾收集的时间和花在应用时间的占比。可以通过参数: -XX:GCTimeRatio=<n>, 垃圾收集时间占: 1/1+n

理想的情况: 在吞吐量最大的时候,停顿的时间最小

串行收集器

单线程的操作,当我们内存不足的时候,就会起一个专门回收的线程进行回收,然后会暂停应用,进行垃圾回收,回收完成,再取消暂停,应用继续运行。简单粗暴,清除彻底。

  • -XX:+UseSerialGC(使用这个的时候,默认开启了Old区的GC方式也是SerialGC相当于使用参数-XX:UseSerialOldGC)

并行收集器

并行(Parallel): 指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。适合科学计算、后台处理等弱交互场景。

  • 吞吐量有限
  • -XX:+UseParallelGC(使用这个的时候,默认开启了Old区的GC方式也是ParallelGC相当于使用参数-XX:+UseParallelOldGC)
  • Server模式下的默认收集器

并发收集器

并发(Concurrent): 指用户线程与垃圾收集线程同时执行(但不一定是并行的, 可能会交替执行),垃圾收集线程在执行的时候不会停顿用户程序的运行。适合对响应时间有要求的场景,比如一些web应用。

  • 响应时间优先
  • CMS: -XX:+UseConcMarkSweepGC(设置CMS的时候,Young区默认是使用并发的方式进行回收,相当于参数: -XX:+UseParNewGC)
  • G1: -XX:UseG1GC

各个年代垃圾收集器的分布图

image.png
如何选择垃圾收集器
  • 优先调整堆的大小让服务器自己来选择
  • 如果内存小于100M,使用串行收集器
  • 如果是单核,并没有停顿时间的要求,串行或者JVM自己选择
  • 如果允许停顿时间超过1秒,选择并行或者JVM自己选择
  • 如果响应时间最重要,并且不能超过1秒,使用并发收集器

官方文档: 如何选择垃圾收集器

官方文档: GC调优指南

相关文章

网友评论

      本文标题:垃圾收集器

      本文链接:https://www.haomeiwen.com/subject/yyluoqtx.html