IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 垃圾收集算法 -> 正文阅读

[数据结构与算法]垃圾收集算法

判断对象是否存活的方法

引用计数

对象有一个属性引用次数,当对象被引用时,该属性值加一。当对象取消引用时减一。引用次数为0时,表明该对象不会再被使用,认为是死亡对象。

可达性分析

从GC Roots开始往下搜索对象,搜索的路径构成引用链。若一个对象无引用链与GC Roots相连为不可达,否则可达。

GC Roots:

  • 虚拟机栈中引用的对象
  • 方法区静态属性引用的对象
  • 方法区常量引用的对象
  • 本地方法栈中JNI引用的对象

垃圾收集算法

标记-清除(Mark Sweep)算法

每个对象对应一个标记位,记录是否可达。

  1. 标记。对空间中对象进行可达性分析,标记可达对象。
  2. 清除不可达对象。

优点:

  • 只需找到对象被一个GC Roots可达的对象引用即可判断可达。
  • 不移动对象
    缺点:
  • 内存碎片问题。当执行多次标记清除算法后,会产生大量小的内存碎片。当要创建大对象,会遇到无足够连续空间分配。
  • 标记和清除两个过程的效率都不高。标记要递归和遍历整个空间一遍,清除也要遍历整个空间一遍。

标记-压缩(Mark Compact)算法

  1. 标记。对空间中对象进行可达性分析,标记可达对象。
  2. 压缩。将可达对象全部移向空间的一端,清除可达对象边界之外的内存空间。

优点:

  • 无内存碎片问题。
  • 压缩过程,移动对象的效率不高。
    缺点:
  • 当存活的对象多时,复制次数变多,效率变低。

复制(Copy)算法

将内存空间分为两半A0、A1。

  1. 对空间A0进行可达性分析,标记可达对象。
  2. 将可达对象复制到空间A1, 清除A0空间。

优点:

  • 无内存碎片问题。
  • 实现简单
    缺点:
  • 内存空间仅一半可利用,空间利用率不高
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-03 01:23:44  更:2022-02-03 01:24:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:44:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码