20_GC垃圾回收机制

本文详细探讨了Java中的垃圾回收机制,包括引用计数法、根搜索算法、标记清除、标记复制和分代收集,以及回收垃圾的时机,如空间不足触发和主动调用System.gc()。同时介绍了强分代假说和弱分代假说对垃圾回收的影响。
摘要由CSDN通过智能技术生成

GC

如何确定垃圾

  • 引用计数算法

    • 给对象添加一个引用计数器,每当一个地方引用它时,计数器加1,每当引用失效时,计数器减少1,当计数器的数值为0时,也就是对象无法被引用时,表明对象不可在使用。

    • 但是这个算法存在一个致命的缺陷,无法解决循环引用的问题。

  • 根搜索算法

    • 这个算法的基本思想是将一系列称为“GC Roots”的对象作为起始点,从这些起始结点开始向下搜索,搜索所走的路径称为引用链。
    • 当一个对象到所有的GC root之间没有任何引用链相连时,就认为该对象变成了垃圾。
    • GC Roots包含对象:
      • 虚拟机栈中引用的对象
      • 方法区中的静态属性引用的对象

如何回收垃圾

  • 标记清除算法Mark Sweep
    • 首先标记出所有需要回收的对象,在完成标记后,统一回收掉所有被标记的对象
    • 也可以标记存活的对象,统一回收所有未被标记的对象
    • 会产生内存碎片

在这里插入图片描述

  • 标记复制算法
    • 一次性回收大片的连续空间
    • 内存利用率低,不会产生内存碎片
    • 如果说有少量存活对象,复制起来很快,适用于少量对象存活的情况
    • 如果有大量对象存活,就需要复制大量对象,效率就低了
      在这里插入图片描述
  • 标记整理算法Mark Compact

在这里插入图片描述

  • 分代收集算法
    • 强分代假说
      • 熬过越多次垃圾收集过程的对象就越难以消亡。(简单理解就是越老的对象就具有”老而不死”的特性)
    • 弱分代假说
      • 弱分代假说(Weak Generational Hypothesis): 绝大多数对象都是朝生夕灭的.

在这里插入图片描述

回收垃圾的时机

  • 申请heap space失败后会触发GC回收
  • 系统进入idle(休眠)后一段时间会进行回收
  • 主动调用GC进行回收 System.gc()
  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coo1heisenberg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值