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
