[jvm]GC收集器总概

Serial垃圾收集器

Serial 收集器使用单线程清理堆的内容。使用 Serial 收集器,无论是进行 Minor GC 还是 Full GC,清理堆空间时,所有的应用线程都会被暂停。进行 Full GC 时,它还会对老年代 空间的对象进行压缩整理。

Throughput垃圾收集器

Throughput 收集器使用多线程回收新生代空间,Minor GC 的速度比使用 Serial 收集器快 得多。由于 Throughput 收集器使用多线程,Throughput 收集器也常常 被称为 Parallel 收集器。Throughput 收集器在 Minor GC 和 Full GC 时会暂停所有的应 用线程,同时在 Full GC 过程中会对老年代空间进行压缩整理。

CMS收集器

CMS 收集器设计的初衷是为了消除 Throughput 收集器和 Serial 收集器 Full GC 周期中 的长时间停顿。CMS 收集器在 Minor GC 时会暂停所有的应用线程,并以多线程的方式 进行垃圾回收。
CMS 收集器在 Full GC 时不再暂停应用线程,而是使用若干个后台线程定期地对老年代空 间进行扫描,及时回收其中不再使用的对象。这种算法帮助 CMS 成为一个低延迟的收集 器:应用线程只在 Minor GC 以及后台线程扫描老年代时发生极其短暂的停顿。应用程序 线程停顿的总时长与使用 Throughput 收集器比起来短得多。

G1垃圾收集器

G1 垃圾收集器(或者垃圾优先收集器)的设计初衷是为了尽量缩短处理超大堆(大于 4 GB)时产生的停顿。G1 收集算法将堆划分为若干个区域(Region),不过它依旧属于分代 收集器。这些区域中的一部分包含新生代,新生代的垃圾收集仍然采用暂停所有应用线程 的方式,将存活对象移动到老年代或者 Survivor 空间。同其他的收集算法一样,这些操作 也利用多线程的方式完成。
G1 收集器属于 Concurrent 收集器:老年代的垃圾收集工作由后台线程完成,大多数的工 作不需要暂停应用线程。由于老年代被划分到不同的区域,G1 收集器通过将对象从一个 区域复制到另一个区域,完成对象的清理工作,这也意味着在正常的处理过程中,G1 收 集器实现了堆的压缩整理(至少是部分的整理)。因此,使用 G1 收集器的堆不大容易发生 碎片化——虽然这种问题无法避免。

摘抄至------《Java性能权威指南》5.1.2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值