jvm垃圾回收器复习

jvm垃圾回收器有4个:

  • 串行回收器serial
  • 并行回收器parallel
  • cms
  • g1回收器
  1. 串行回收器,是个比较古老的存在,是一个单线程的回收器,仅使用一个CPU或一条收集线程去完成垃圾收集,并且在进行垃圾收集时需要暂停所有工作线程,即stop the world。(看着好像很不好用,但是《深入理解jvm》一书中说该收集器仍在使用,说明简单高效的serial还是有适用的场景的)。还有个parnew,serial的多线程版本,第一次实现了让垃圾收集线程和用户线程(几乎)同时工作
  2. 并行回收器,parallel,使用多线程来扫描并压缩堆,但是无论minorGC还是full GC都会暂停线程,它关注的点不是垃圾收集时用户线程的停顿时间,而是吞吐量,(运行用户代码时间/(运行用户代码时间+垃圾收集时间)),是从总体上来看的效率问题。高吞吐量可以有效利用CPU资源。
  3. CMS收集器,以获取最短回收停顿时间为目标的收集器,让用户感觉到的停顿时间较小,用户体验较好。它的过程略复杂,分为四部分:
    • 初始标记,速度快,标记GC Roots能够关联到的对象,需要Stop the world
    • 并发标记,速度慢,进行GC Roots tracing,判断对象是否仍在使用
    • 重新标记,在并发标记的时候,由于标记耗时期间,对象状态可能会发生变化,需要重新标记以修正。速度快,需要stw。
    • 并发清除,在线程工作的时候,并发的清理垃圾,这样有三种缺点:(1). 由于与用户线程同时运行,会占用CPU资源,导致用户线程变慢,总吞吐量降低。(2).由于没有stw,用户线程仍在运行,所以可能会有新的垃圾不断产生,只好留待下一次Full GC时清理,这种垃圾称为“浮动垃圾”。(3).CMS基于标记-清除算法,会产生大量空间碎片,不利于分配内存给大对象,因此容易触发Full Gc以对碎片进行整理。
  4. G1收集器,并行并发、分代收集、空间整合、可预测的停顿。暂时未理解到位,需要多次复习加强理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值