【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

视频地址:https://www.bilibili.com/video/av79798486?from=search&seid=3342141978949441005

1.什么是内存

物理内存:

CPU访问内存慢:板载Cache占面积大,Core是内存做计算硬件

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

虚拟内存

为延长SD卡寿命,减少擦写次数,移动设备不支持内存交换

ios会压缩不活跃内存进特定区域,节省物理内存给活跃内存使用,但Android不会

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

内存寻址范围

32位和64位讲的是CPU运算数位,寻址范围大小不能确定,控制的是CPU的MCU(MemoryControlUnit)位数

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

 

2.Andoird内存管理

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

3.LowMemoryKiller:LMK可能引起闪退、崩溃、关机。

内存不够时优先杀掉Cached--Previous--Home桌面重建--Service--Perceptible音乐--Foreground闪退--System重启手机

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

4.内存指标

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

 

5.Unity内存管理:

移动端显示的内存占用量

RSS 是当前App使用的全部内存,如有调用其他App 也要算入自身使用的内存

PSS 是如果调用其他公用APP,平均分配给所有调用此app内存的(如果其他APP使用较多,均摊下来自身占用的也会变多)

USS 是仅自己的,没有其他公用APP占的内存。

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

 

6.Unity内存分配方式

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

Managed Memory托管内存

Editor与Runtime下统计到的内存大小不同,分配时机和方式也不同

Runtime情况下LoadAsset并不仅内存

因为更注重编辑时的流畅性,会将资源都Loading进去,因此Editor打开就会占内存,但在2019.3AssetPipeline2.0优化了Editor下资源载入方式。

按管理者分:引擎运行时自己分配的内存使用

用户管理内存,项目内存压力大时实际要考虑的。

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

7.Unity检测不到的内存

native插件:无法分析已编译过的C++是如何分配和使用内存的

Lua:自己管理

8.

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

容易造成Native内存过高的原因:

1)场景 

2)音频 :DSP buffer设置的大小,过大声音延迟,过小CPU负荷

Force to mono强制单声道

3)代码大小

模板泛型的滥用:int float double 会影响代码自身大小、内存大小、编译速度

C++用到的所有class都会被展开为静态类型

9.AssetBundle从入门到掌握(适合初学者) https://blog.****.net/qq_35361471/article/details/82854560

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

TypeTree关掉后,内存减少、包体减小、Build和运行变快

压缩方式:推荐Lz4,压缩比Lzma快十倍以上,包体稍微大一点,读取快,块状解压占更少内存。

单个AssetBundle官方建议值:1-2M,主要考虑网络带宽。

不建议使用Resource文件夹,会生成红-黑树帮助检索资源位置,在游戏开始就在内存内不可删,也会拖慢启动时间。

纹理:

Upload Buffer :Unity内设置,填满多大以后向CPU push一次

Read/Write:没必要都不开,正常读进内存解析后会放入UploadBuffer内,内存的这部分会被Delete掉。

如果开R/W就不会删掉,内存与显存各一份。

MipMaps:UI没必要开,根据摄像机远近生成2的n次幂个的压缩图。

Compression:不一定开了以后内存就被压缩,要测试

Assets:unity官网资源管理BestPractics文章

10.Managed Memory托管内存

【笔记】视频:浅谈Unity内存管理,讲师: 高川(Unity大中华区企业技术支持经理)

当一次内存Block连续6次GC没有访问到,才会被返还给OS系统。实际几乎达不到返回的情况