美文网首页
内存管理之垃圾回收

内存管理之垃圾回收

作者: APP4x | 来源:发表于2020-11-19 19:18 被阅读0次
这是我在《Unity游戏优化 (第2版)》看的,记录一下~

垃圾回收是啥?
重要工作就是 确保不使用比所需要的更多的托管堆内存,而不再需要的内存会自动回收

比如创建一个GameObject,接着销毁他,那么GC将标记该GameObject使用的内存空间,以便以后回收
GC不会立即回收,只在有需要的时候回收

当请求使用新的内存空间,托管的堆内存中有足够的空间空间以满足该请求时,GC只简单的分配新的空间并交给调用者
如果没有足够空间,那GC就开始扫描所有已存在并且不再使用的内存分配并清除他们
(GC一般作为扩展堆空间的最后手段)


Unity使用的Mono版本中的GC:
是一种追踪式GC,它使用标记与清除策略

其算法分为几个阶段:
1.创建对象时,为每个分配的对象通过一个额外的数据位追踪,标识对象是否被标记(false为未标记)
2.收集过程时,通过设置对象的标识为true,标记所有依然对程序可访问的对象
可访问对象要么是直接引用(栈上的静态或本地变量),要么通过其他直接或间接可访问对象的字段(成员变量)来间接引用(本质上收集一系列依然被程序引用的对象)
3.如果对象被标记,那么在某处依然引用它,GC将无视他。如果没有被标记,那么它将要被回收。
该阶段所有标记的对象都将被跳过,但在下次垃圾回收扫描之前会将它设置回false
(GC在内存中维护所有对象的列表,而引用程序维护一个独立的列表,仅包含gc维护的一部分)

当没有被标记的对象被回收释放空间后,重新访问创建对象的初始请求。
a.如果GC已经为对象释放了足够的空间,就会分配内存并返回给调用者
b.如果空间不够,就只能向操作系统请求以扩展托管堆

最终可以分配内存空间并返回给调用者

相关文章

  • Java GC

    概述 GC => 垃圾回收 = 回收可用空间 + 压缩内存 内存管理 手动内存管理 => C | C++ 自动内存...

  • android--垃圾回收与内存优化

    什么是垃圾回收 对比C/C++这种需要自己管理内存的语言 java可以实现自动内存管理和回收 垃圾回收器负责回收程...

  • 常见GC算法与V8引擎

    内存管理 垃圾回收与常见GC算法 V8引擎的垃圾回收 Performance工具 代码优化实例 内存管理 为什么要...

  • 内存管理之垃圾回收

    这是我在《Unity游戏优化 (第2版)》看的,记录一下~ 垃圾回收是啥?重要工作就是 确保不使用比所需要的更多的...

  • Android性能调优(4) — 内存泄漏与内存抖动

    在上一遍《Android性能调优(3)—内存管理与垃圾回收》我们对Android内存管理与垃圾回收有了一定的认识。...

  • 内存管理

    内存管理1、什么时候触发垃圾回收? 垃圾回收器周期性运行,如果分配的内存非常多,那么回收工作也会很艰巨,确定垃圾回...

  • JavaScript的垃圾回收机制

    大纲 1、认识垃圾回收机制2、垃圾回收机制的原理3、垃圾回收机制的标记策略4、垃圾回收机制与内存管理 1、认识垃圾...

  • 深入Java底层:GC

    概述 下文主要分为以下几个大模块进行JVM的GC解读: 垃圾回收之标记算法 垃圾回收之回收算法 堆内存年轻代垃圾收...

  • javaScript 性能优化(学习笔记)

    内容概要 内存管理 垃圾回收和常见的GC算法 V8引擎的垃圾回收 Performance 工具 代码优化实例 内存...

  • GC概述

    垃圾回收机制 垃圾回收机制是一套自动管理内存的技术,如果某一块内存是不可用的,那么将其释放。 垃圾回收的实现——自...

网友评论

      本文标题:内存管理之垃圾回收

      本文链接:https://www.haomeiwen.com/subject/qkvliktx.html