三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Unity内存管理与GC优化

Unity内存管理与GC优化

一、cpu如何访问内存

内存结构:三级缓存ram和主内存rom

答案:先行后列,二维数组内存按行连续存放

内存对齐:编译器在分配变量内存地址时,按照特定字节边界(如4字节、8字节)来放置数据

二、操作系统如何管理内存

内存交换:将内存中暂时不用的数据交换到硬盘(虚拟内存文件)中,以腾出物理内存。

三、Unity如何使用内存

mangerd memory:托管堆

profiler:性能分析器

四、unity如何管理内存

栈内存在编译阶段就已经分配好,所以相对来说比较小

内存碎片:堆内存分配零碎产生,容易产生内存浪费

将字符串、类对象存放在堆内存中(引用类型)

栈赋值是深拷贝,堆赋值是浅拷贝

栈因为内存排列整齐,以连续内存存储,内存分配的时候做简单加减法,因此分配、释放快速;堆通过链表的访问,找到一块合适大小的空间进行分配

五、GC优化

GC机制:当一个对象的RefCount引用次数值为0时,被当作垃圾内存回收

GC触发时机:

1.定时回收

2.堆分配时堆上的可用内存不足

3.手动强制GC。GC.Collect()

GC优化:

1.提前缓存不会变的对象,而不是在经常调用的函数中生成

2.通过条件判定,减少会产生GC的函数执行次数

3.降低会产生GC的函数的执行频率

4.清空容器以便于反复使用容器

6.减少字符串操作

7.为解决tag比较会产生的GC,unity特意写出的API

8.装箱:值类型转换为引用类型

9.协程使用yield return会返回一个枚举器

11.手动强制GC

← 返回列表