HotSpot 垃圾回收算法简介

本文详细介绍了HotSpot虚拟机的垃圾回收机制,包括分代回收的概念,以及四种主要的垃圾回收算法:复制、标记清除、标记清除压缩和并发标记清除。此外,还介绍了四种垃圾收集器的工作原理及其特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HotSpot垃圾回收机制
    分代回收

垃圾回收算法
    复制
          将A空间中的可达对象复制到另一块空白空间B中,然后回收A的整个空间。(必须有一块空白空间,空间利用率不是很高,但是回收快)。
    标记清除
          遍历A空间,标记其中的可达对象,然后在遍历A空间,清除其中的不可达对象。(空间利用率高,但是会产生碎片,而且需要两次遍历空间A)。
    标记清除压缩
          遍历A空间,标记可达对象,遍历A空间,将可达对象移动到A空间的开始位置,并回收不可达空间的内存。(是复制算法和标记清除法的综合体,不会产生内存碎片)。

垃圾收集器1,2,3需要Stop-the-world,4的某些阶段可以和应用程序并发执行)
    1、串行收集器(单CPU执行)
         新生代:使用串行的复制算法。
         老生代:使用串行的标记清除压缩算法。

   2、 并行收集器
         新生代:使用复制算法的并行版本。
         老生代:不并行,使用串行版本的标记清除压缩算法。

   3、 并行压缩收集器
         新生代:使用复制算法的并行版本。
         老生代:使用Mark-Summary-Compact算法。(内存空间被划分为若干固定大小的region
              Mark:先串行的mark那些在代码中能够直接被引用的对象,将这些对象分配给各个线程,然后,各个线程并行mark所有的可达对象,并更新对象所在区域的信息(Object size and location)。
              Summary:操作对象为region,不是object,首先根据region中可达对象的密度, 查找dense prefix(就是一个redion),然后针对dense prefix后面的所有region, The summary phase calculates and stores the new location of the first byte of live data for each compacted region。目前串行实现。可并行,但是并行的优先级比mark和compact低。
              Compact:利用Summary中的统计信息,将可达对象向前拷贝。(并行执行)。

    4、并发标记清除收集器(收集器可以和应用程序并发执行)
         新生代:使用复制算法的并行版本。
         老生代:使用并发的标记清除(Concurrent Mark-Sweep  CMS)算法。
              Initial Mark:应用程序短暂挂起,串行标记那些可以在应用程序代码中被直接引用的对象。
              Concurrent Mark:通过Initial Mark中标记的对象,专门使用一个或多个线程(官方文档上默认为一个),通过Initial Mark的结果,标记所有可达的对象,线程执行的时候,应用程序不必挂起,可以和应用程序并发的执行
              Remark:由于在 Concurrent Mark 阶段,应用程序在执行,可能有新的垃圾产生,此时,应用程序短暂挂起,GC启动多个线程, 对那些在Concurrent Mark阶段被改变的对象, 快速并行的进行重标记。
              Concurrent Sweep:并行回收垃圾对象所占用的空间,此阶段,应用程序可以和GC并发的执行,在此阶段产生的垃圾会在下次回收。

    本文参考Oracle官方文档:Memory Management in the Java HotSpot™ Virtual Machine

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值