深入JVM学习------垃圾回收器

深入JVM学习------垃圾回收器

这篇文章主要学习一下四种垃圾回收器。分别是串行、吞吐量优先、响应时间优先以及G1(Garbage1).

串行

  • 单线程
  • 堆内存较小,适合个人电脑
    在这里插入图片描述
    在执行垃圾回收时会阻塞其它线程,等待垃圾回收后其余线程再运行。

吞吐量优先

  • 多线程
  • 堆内存较大,多核CPU
  • 单位时间内,STW的时间最短
    在这里插入图片描述

在执行垃圾回收时可以并行的进行垃圾回收。

响应时间优先

  • 多线程
  • 堆内存较大,多核CPU
  • 尽可能让单次STW时间最短
    在这里插入图片描述
    初始标记,时间很短,并且只标记根对象。

并发标记,标记剩余对象。

重新标记,重新标记是因为部分新生代引用了老年代,需要把新生代也标记上。

并发清理,在线程执行并发清理时,由于是并发的,其余线程也可能同时产生垃圾,这些垃圾成为浮动垃圾。

G1

G1的垃圾回收原理是这样的:
在这里插入图片描述
它是将堆内存划分为多个域,然后进行操作。

Young Collection:新生代垃圾回收。

Young Collection + Concurrent Mark:新生代垃圾回收 + 标记。

Mixed Collection:综合回收。

  • Young Collection
    在这里插入图片描述

图中一个小块代表一个域,然后新的对象会被存入伊甸园区(E)

在这里插入图片描述
在第一次新生代垃圾回收过后,存活下来的数据会进入幸存区。

在这里插入图片描述
循环多次上面步骤,最后幸存区的数据在又一次垃圾回收后部分进入老年代(o),一部分进入幸存区(s)

这些过程都是会引起STW的。

  • Young Collection + Concurrent Mark
    在这里插入图片描述

  • Mixed Collection
    在这里插入图片描述

图中暂停是为了防止其它线程运行改变它。

只有部分老年代被回收是因为限制了回收时间,导致必须要找垃圾最多的地方进行回收。如果垃圾少的话所有老年代都会被回收。

总结

  • SerialGC
    • 新生代内存不足发生的垃圾收集 — Minor GC
    • 老年代内存不足发生的垃圾收集 — Full GC
  • ParallelGC
    • 新生代内存不足发生的垃圾收集 — Minor GC
    • 老年代内存不足发生的垃圾收集 — Full GC
  • CMS
    • 新生代内存不足发生的垃圾收集 — Minor GC
    • 老年代内存不足
  • G1
    • 新生代内存不足发生的垃圾收集 — Minor GC
    • 老年代内存不足

CMS和G1的老年代内存不足时,只有当垃圾产生速度大于垃圾回收速度才会触发Full GC,否则只会是并发的垃圾回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值