整理自高川(Unity大中华区企业技术支持经理)2019年12月15日在 UUG北京开发者活动 - Unity助力AR创作大赛上的演讲 ,视频地址:
浅谈unity内存管理
Unity内存管理
-
Unity 是一个C++引擎,所有的C#代码都会编译成C++代码
-
主要由三层构成
- 底层Runtime全部有C++构成
- 中层为bonding层(注:不确定是不是这个单词,就是一个粘合层),以前使用Unity自定义的语言,但是因为开发不方便,现在主要使用C#了,作用是将C#和C++连接在一起,大家用到的Unity的API都是在这一层提供的,底层运行的还是C++,这只是一个warpper封装
- 上层就是C#构成的用户代码
- 用户代码在il2cpp模式下会转换为cpp代码
- VM依然存在,il2cpp本身也是一个VM,目的是跨平台
Unity内存分配方式
- Native Memory
- Managed Memory
- Editor
Editor和Runtime是完全不同的,不仅是内存大小不同,分配时机,方式都不同,例如一个asset,在Runtime下,不主动load,不会进内存,Editor下,只要打开Unity,就可能会加载进内存,这种策略是为了保证编辑时的流畅,这种策略也导致首次打开Unity项目耗时特别长,会转换资源,再load相关资源,在2019.3中有了新的策略,按需导入和加载

这篇博客详细介绍了Unity的内存管理,包括Unity的三层架构、内存分配方式(Native Memory和Managed Memory)、内存管理策略以及Unity监测不到的内存。Unity的内存管理涉及C#、C++和il2cpp,重点关注Native Memory中的Scene、Audio、AssetBundle、Texture和Mesh的优化,以及托管部分的GC机制和内存碎片化问题。建议使用Destroy而不是Null,避免闭包和匿名函数产生的内存占用,并合理使用配置表和Singleton模式。
最低0.47元/天 解锁文章
1173

被折叠的 条评论
为什么被折叠?



