垃圾回收器

分类:

  1. 串行
  2. 吞吐量优先
  3. 响应时间优先

 

详细介绍:

1.串行

  • 单线程
  • 堆内存较小,适合个人电脑
  • 开启串行垃圾回收器的jvm参数:-XX:+UseSerialGC = Serial(新生代复制算法) + SerialOld(老年代标记整理算法 )

                                      

:在一个进程进行垃圾回收时,要在一个安全点阻塞其他进程,进行一次stop the world,因为对象回收时,会涉及到对象移动,引用的地址会改变。 

2.吞吐量优先 

  • 多线程
  • 堆内存较大,多核cpu
  • 目标:让单位时间内,stw的时间最短(单位时间内的总stw时间最短)
  • 开启吞吐量优先的垃圾回收器JVM参数:-XX:+UseParallerlGC~-XX:+UseParallelOldGC

              内存不足,触发垃圾回收时,多个线程在一个安全点暂停,多个线程开始垃圾回收。垃圾回收线程的个数,默认和电脑的CPU核数一致。并且线程数可以通过JVM参数进行设置(-XX:ParallelGCThreads=n)

 

3.响应时间优先

 

  • 多线程
  • 堆内存较大,多核cpu
  • 目标:尽可能的让单次stw时间最短(单次stw时间最短,但单位时间内可能发生很多次stw,总stw时间未必最短)
  • 开启响应时间优先的垃圾回收器JVM参数:-XX:+UseConcMarkSweepGC~-XX:+UseParNewGC~SerialOld
  • 特点:用户线程和垃圾回收线程并发执行(可以干不同的事,减少了stw的时间),是一款工作在老年代的垃圾回收器,与之配合的事-XX:UseParNewGC工作在新生代的垃圾回收器。考虑到并发失败的问题,采取的补救措施是,让CMS垃圾回收器退化成单线程的SerialOld垃圾回收器(基于标记整理的老年代回收器)

如上图,老年代内存不足,进行垃圾回收。CMS垃圾回收器进行初始标记(时间很快,只标记根对象),此时仍然需要stop the world,其他线程阻塞,标记完成后,用户线程可以继续运行,垃圾回收线程此时可以并发标记,把剩余的垃圾找出来,不需要stop the world。由于并发标记以后,可能改变了对象的引用,所以并行标记以后要进行重新标记需要stw,然后用户线程可以重新运行,垃圾回收进程可以进行并发清理。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值