垃圾收集器(二)

1、串行回收器

串行回收器使用单线程进行垃圾回收的回收器。每次回收时,串行回收器只有一个工作线程,对于并行能力较弱的计算机来说,串行回收器的专注性和独占性往往有更好的性能表现。串行回收器可以在新生代和老年代使用。根据作用于不同的堆空间,分为新生代串行回收器和老年代串行回收器。 

新生代串行收集器使用复制算法。
-XX:+UseSerialGC 是client默认使用的垃圾收集器。

老年代串行回收器

老年代串行收集器使用的是标记压缩算法。和新生代串行收集器一样,他也是一个串行的、独占式的垃圾回收器。

老年代串行回收器可以和多种新生代回收器配合使用,同时它也可以作为CMS回收器的备用回收器。

启动老年代串行回收器,可以尝试使用的以下的参数:

-XX:+UseSerialGC: 新生代、老年代都使用串行回收器
-XX:+UseParNewGC 新生代使用ParNew回收器,老年代使用串行收集器
-XX:+UseParallelGC 新生代使用ParallelGC回收器,老年代使用串行收集器 

2、并行回收器

并行回收器在串行回收器的基础上做了改进,它使用多个线程同时进行垃圾回收。对于并行能力强的计算机,可以有效缩短垃圾回收所需要的实际时间。

ParNew 回收器是一个工作在新生代的垃圾收集器。它只是简单地将串行回收器多线程化,它的回收策略、算法以及参数和新生代串行回收器一样。也是独占式的回收器。(复制算法)

开启ParNew 回收器可以使用以下参数
-XX:+UseParNewGC 新生代使用ParNew回收器,老年代使用串行回收器
-XX:+UseConcMarkSweepGC: 新生代使用ParNew回收器,老年代使用CMS

ParNew回收器工作时的线程数量可以使用-XX:ParallelGCThreads参数指定。

新生代ParallelGC回收器

ParallelGC回收器有一个重要的特点:它非常关注系统的吞吐量

新生代ParallelGC 回收器可以使用以下参数启用:

-XX:+UseParallelGC 新生代使用ParallelGC回收器,老年代使用串行回收器。
-XX:+UseParallelOldGC : 新生代使用ParallelGC回收器,老年代使用ParallelOldGC回收器

ParallelGC回收器提供了两个重要的参数用于控制系统的吞吐量

-XX:MaxGCPauseMillis 设置最大垃圾收集停顿时间。

-XX:GCTimeRatio 设置吞吐量的大小

老年代ParallelOldGC回收器,
也是一种多线程并发的收集器,使用的标记压缩算法。也是关注吞吐量的收集器。

 CMS回收器
与ParallelGC和ParallelOldGC不同,CMS回收器主要关注与系统停顿时间。CMS是ConcurrentMarkSweep的缩写,意为并发标记清除。因此它是哦那个的标记清除算法,它又是一个使用多线程并行回收的垃圾回收器。

CMS工作时,主要步骤有:初始标记、并发标记、预清理、重新标记、并发清除和并发重置。
其中初始标记和重新标记是独占系统资源的,也就是会发生STW,而预清理、并发标记、并发清除和并发重置是可以和用户线程一起执行的。

由于CMS回收器不是独占式的回收器,在CMS回收过程中,应用程序仍然在不停地工作。在应用程序工作过程中,又会不断的产生垃圾。这些新生成的垃圾在当前CMS回收过程中是无法清除的,。同时,因为应用程序没有中断,所以在CMS回收过程中,还应该确保应用程序有足够的内存可用。因此CMS回收器不糊等待堆内存饱和时才会进行垃圾回收,二十大当堆内存使用率达到某一阈值时便开始进行回收,以确保应用程序在CMS工作红,依然有足够的空间支持应用程序运行。

在CMS过程中,会出现内存碎片的问题。通过使用参数 -XX:+UseCMSCompactAtFullCollection开关可以使CMS在垃圾收集完成后,进行一次内存碎片整理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值