【JVM垃圾回收】垃圾回收器

垃圾回收器

专业词汇解释

并行收集:指多条垃圾收集线程并行工作,但是此时用户线程,仍处于等待线程
并发收集:指用户线程线程个垃圾线程同时工作,不一定是并行的可能会交替执行。用户程序在继续运行,垃圾收集程序在另一个cpu运行。
吞吐量:即CPU用于运行用户代码的时间与CPU总消耗时间的比值(吞吐量 = 运行用户代码时间 / ( 运行用户代码时间 + 垃圾收集时间 )),也就是。例如:虚拟机共运行100分钟,垃圾收集器花掉1分钟,那么吞吐量就是99%

1、串行

  • 单线程
  • 内存小,个人电脑cpu
    在这里插入图片描述

安全点:让其他线程都在一个安全的时刻停下,以免垃圾回收时移动对象地址,使得其他线程找不到被移动的对象。

因为是串行,所以一个垃圾回收线程,且在该线程执行回收工作时,其他线程进入阻塞状态

收集器:

1、Serial收集器

Serial收集器是最基本的,发展历史最悠久的收集器。

特点:单线程,简单高效(与其他收集器的单线程相比),采用复制算法。
对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率。
收集器进行垃圾回收时,必须暂停其他所有的工作线程,直到它结束(Stop The World)。

2、ParNew收集器

ParNew收集器其实就是Serial收集器的多线程版本。

特点:多线程、ParNew收集器默认开启的收集线程数与CPU的数量相同。
在CPU非常多的环境中,可以使用-XX:ParallelGCThreads参数来限制垃圾收集的线程数。
和Serial收集器一样存在Stop The World问题

3、Serial Old收集器

Serial Old是Serial收集器的老年代版本

特点:同样是单线程收集器,采用标记-整理算法。

2、吞吐量优先

  • 多线程
  • 堆内存较大,多核CPU
  • 单位时间内,STW(停止其他所有工作线程)时间最短
  • JDK1.8默认使用的垃圾回收器。
    在这里插入图片描述

并行收集器:

1、Parallel Scavenge 收集器

与吞吐量关系密切,故也称为吞吐量优先收集器。
特点

  1. 属于新生代收集器也是采用复制算法的收集器(用到了新生代的幸存区),又是并行的多线程收集器(与ParNew收集器类似)。
  2. 该收集器的目标是达到一个可控制的吞吐量。还有一个值得关注的点是:GC自适应调节策略(与ParNew收集器最重要的一个区别)。

GC自适应调节策略
Parallel Scavenge收集器可设置-XX:+UseAdptiveSizePolicy参数。
当开关打开时不需要手动指定新生代的大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRation)、晋升老年代的对象年龄(-XX:PretenureSizeThreshold)等,虚拟机会根据系统的运行状况收集性能监控信息,动态设置这些参数以提供最优的停顿时间和最高的吞吐量,这种调节方式称为GC的自适应调节策略。

Parallel Scavenge收集器使用两个参数控制吞吐量:

  1. XX:MaxGCPauseMillis 控制最大的垃圾收集停顿时间

  2. XX:GCRatio 直接设置吞吐量的大小

2、Parallel Old 收集器

是Parallel Scavenge收集器的老年代版本。
特点:多线程,Parallel Old 收集器和Serial old收集器采用标记-整理算法(老年代没有幸存区)

3、响应时间优先

  • 多线程
  • 堆内存较大,多核CPU
  • 尽可能让单词STW时间短,(尽量不影响其他线程运行)。
    在这里插入图片描述

并发收集器:

1、CMS收集器

Concurrent Mark Sweep,一种以获取最短回收停顿时间为目标的老年代收集器

特点:基于标记-清除算法实现,并发收集、低停顿,但是会产生内存碎片。

应用场景:适用于注重服务的响应速度,希望系统停顿时间最短,给用户带来更好的体验等场景,如Web程序,b/s服务。

CMS收集器的运行过程,分为下列4步:

  1. 初始标记:标记GC Roots能直接到的对象。速度很快但是仍存在Stop The World问题。
  2. 并发标记:进行GC Roots Tracing 的过程,找出存活对象且用户线程可并发执行。
  3. 重新标记:为了修正并发标记期间因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录。仍然存在stw问题。
  4. 并发清除:对标记的对象进行清除回收。

CMS收集器的内存回收过程是与用户线程一起并发执行的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值