Java——JVM虚拟机(四)

JVM中有哪些常见的垃圾回收器?各自的特点是什么?

Java发展至今,已经推出了好几代的垃圾回收器,包括Serial、ParNew、Parallel、CMS、G1以及Java11中最新的ZGC,每一代的GC都是堆上一代的改进和完善。

新生代使用的垃圾回收器主要有:

  • Serial串行收集器

(1)单线程收集器,在单核CPU架构下,JDK3之前新生代的回收器的唯一选择。

(2)它与应用线程的执行是串行的,也即是说,执行应用线程的时候,不会执行GC,执行GC的时候不会执行应用

线程。

(3)在CPU单核架构下,Serial串行化收集器情况效果很好,因为采用单个回收线程,在整个回收过程中,没有线程

切换的开销。

(4)现在的大部分都是多CPU的服务器,所以它的使用就很少了。

(5)但是它还是JVM运行在Client模式下的默认垃圾收集器,因为一般桌面应用下新生代空间不是很大,使用这个垃

圾回收器也可以保证回收的时间在100毫秒左右。
在这里插入图片描述

  • ParNew收集器

(1)Serial串行回收器的多线程版本

(2)在进行回收的过程中,仍然会暂停用户线程(STW),然后利用多核CPU的能力,采用多线程方法进行垃圾回


在这里插入图片描述

  • Parallel scavenge收集器

(1)与ParNew线程一样同样为多线程的垃圾回收器,但是关注吞吐量

在这里插入图片描述
(2)提供了自适应的调节策略(也是Parallel scavenge收集器ParNew收集器的一个重要区别)

老年代使用的垃圾收集器主要有:

  • Serial-old收集器
    (1)Serial收集器的老年代的版本,同样使用单线程进行垃圾回收

(2)它存在的主要意义是,在JVM运行的client环境下,配合新生代的serial收集器一起使用

(3)它还可以作为CMS垃圾收集器的后备垃圾回收器

  • Parallel Old收集器

(1)Parallel scavenge的老年代版本,对内存比较敏感、对吞吐量比较高的场合使用

(2)使用标记-整理算法

  • CMS收集器

    (1)真正意义上的并发收集器,第一次实现了让垃圾收集线程与用户线程(基本上)同时工作

    (2)是一种以获取最短回收停顿时间为目标的收集器

具体过程:

  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值