空间回收针对三种内存管理模式

  1. 静态管理模式:在静态内存分配模式 下,无需进行内存回收:所有都是已确定的
  2. 在栈上进行内存空间回收:按block(某个方法)整体进行
  3. 在heap上进行内存空间回收,最复杂 ,接下来对这个问题进行详细的讨论。

使用活性决定回收与否

  1. 可达与不可达:与根对象直接相关或者间接相关。
  2. 根对象:默认请记住(静态区域的数据 ,寄存器中的数据,目前的执行栈中的 数据所指向的内存对象)
  3. 在这个图中,根对象只有一个,那就是运行时栈,它指向的地方都是可达的,而标注为黑色的地方都是不可达的。最后将不可达的部分进行回收即可。

定义活性对象

在一个根元素中被引用,在一个活对象中引用

定义垃圾回收

识别“垃圾”对象,把其占用的内存加以回收。

GC的成本度量

执行时间,延迟时间,所占用的内存/对程序所使用内存的影响。

如果进行人工GC会怎样?

1.如果太少很多dead oibject都没有回收,会导致内存泄漏(因为你有时候没有办法判断要不要进行对共享的内存回收)
2.如果太多,元那本live的对象却被回收了,会产生悬空指针(也就是对象回收了弹幕是引用还在)

内存回收的基本算法:

1.引用计数(reference counting)
为每个object存储一个计数RC,当有其他reference指向它时,RC加1;当其他reference与其断开时,RC减1;如果RC==0,则回收它 (及其所有指向的object)
优点:简单、计算代价分散,“延迟时间”短(对count的修改是在每行代码执行后进行,而非集中进行)
缺点:在进行循环引用的时候,可能会出现计数错误,并发支持较弱,占用额外的内存空间
2.标记-清除(mark-sweep)
Mark阶段:为每一个object设定状态位(live/dead)并记录;sweep阶段:将标记为dead的对象进行清除。到最后就是跑一个图上的搜索。
缺点:标记清除的效率都不高,内存碎片化
3.标记-整理(mark-compact)
Mark阶段:和标记-清除阶段是一样的;compact阶段:所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存
优点:避免了碎片化
缺点:时间消耗太长,影响程序本身
4.复制(copying)
将一个内存空间分成两个部分,现在其中一个进行操作,然后进行标记,没有标记的也就是不需要回收的,就转移到另外一半里面,然后将之前的一半清空。
优点:清除的时候非常的方便;只有存活的数据需要被处理;实现起来很简单
缺点:空间只剩一半,复制可能很浪费时间,所有的引用都必须被更新。

HIT 软件构造 垃圾回收相关推荐

  1. HIT软件构造Lab1--过程分析

    HIT 软件构造Lab1–过程分析 由于实验中要求代码必须是个人完成,所以这里仅提供方法和部分代码. 文章目录 HIT 软件构造Lab1--过程分析 1 实验目标概述 2 实验环境配置 3.1 Mag ...

  2. HIT 软件构造 lab3实验报告

    2020年春季学期 计算机学院<软件构造>课程 Lab 3实验报告 姓名 赵旭东 学号 1180300223 班号 1803002 电子邮件 1264887178@qq.com 手机号码 ...

  3. HIT 软件构造 Lab1

    2022年春季学期 计算学部<软件构造>课程 Lab 1实验报告 姓名 艾浩林 学号 120L021917 班号 2003006 电子邮件 2017869860@qq.com 手机号码 1 ...

  4. HIT软件构造lab1

    目录 1 实验目标概述 1 2 实验环境配置 1 3 实验过程 1 3.1 Magic Squares 1 3.1.1 isLegalMagicSquare() 1 3.1.2 generateMag ...

  5. HIT 软件构造 lab2实验报告

    2020年春季学期 计算机学院<软件构造>课程 Lab 2实验报告 学号 1180300223 班号 1803002 目录 1 实验目标概述 1 2 实验环境配置 1 3 实验过程 1 3 ...

  6. HIT 软件构造 多维度视图

    本节目标 从三个维度看软件构造的构成 用什么杨的模型/视图描述软件系统 将"软甲构造"看作"不同视图之间的转换" 软件构造的多维度视图 按阶段划分:构造时.运行 ...

  7. 哈尔滨工业大学hit软件构造实验lab1

    文章目录 1 实验目标概述 2 实验环境配置 3 实验过程 3.1 Magic Squares 3.1.1 isLegalMagicSquare() 3.1.2 generateMagicSquare ...

  8. HIT 软件构造LAB2

    2022年春季学期 计算学部<软件构造>课程 Lab 2实验报告 姓名 薄文 学号 120L020513 班号 2003004 电子邮件 604094538@qq.com 手机号码 181 ...

  9. HIT 软件构造 过程、系统、工具

    软件构造的一般流程 编码,重构,调试,测试,性能分析,代码评审,构建,发布 coding 从用途上划分:编程语言.建模语言.配置语言.构建语言 从形态上划分:基于语言学的构建语言.基于数学的形式化构造 ...

最新文章

  1. Go 学习笔记(53)— Go 标准库之 path(判断绝对路径、拆分目录和文件、组合路径、返回路径目录、获取路径最后文件名、获取文件扩展名、路径匹配规则)
  2. 谷歌提出「卷积+注意力」新模型,超越ResNet最强变体!
  3. Python使用pandas的crosstab函数计算混淆矩阵并使用Seaborn可视化混淆矩阵实战
  4. oracle ocp题库变化,052最新考试题及答案整理-30
  5. mysql windows编译_Windows平台下编译Mysql源码 | 学步园
  6. java 文件crc校验_JavaCRC校验原理
  7. 【转】造成segment fault,产生core dump的可能原因
  8. Xcode 8 插件安装
  9. Scala模拟Spark分布式计算流程示例代码
  10. 云栖大会极客智造局亮点抢先看
  11. [转载] 杜拉拉升职记——23 “You deserve it”的两种解释
  12. java 字段构造函数_依赖注入–字段vs构造函数vs方法
  13. Oracle SQL精妙SQL语句讲解(二)
  14. Bootstrap3 表单
  15. 轻量级 Lock Free 线程安全的 QueueT 的C#2.0实现
  16. 简单51单片机c语言编程流水灯,51单片机如何实现流水灯?51单片机实现流水灯的三种方法详细分析...
  17. 【渝粤教育】电大中专学前儿童社会教育 (11)作业 题库
  18. python 操作access数据库
  19. 华为大数据解决方案 (文末附PPT下载)
  20. scara机器人动荷载_揭密SCARA机器人

热门文章

  1. 利用js点击小眼睛图片实现转换明文暗码的效果
  2. 国标(GB28181)摄像头无插件对讲及网页直播
  3. Scratch 真题
  4. access中如何画斜线_设计斜线表头
  5. [I2C]I2C通信协议详解(一) --- 什么是I2C
  6. SPA设计与架构-理解单页面Web应用 (埃米顿.A斯科特) 中文pdf扫描版
  7. 怎么修复GoPro运动相机断电损坏打不开的MP4视频
  8. 发布react项目到linux服务器,react项目部署nginx服务器
  9. 支付宝开放平台应用— 乡镇卫生院申请
  10. spring cloud --demo