u3d的gc机制(个人理解总结)

在上一篇博客中,我分享了一篇对u3d的gc机制详细介绍的文章,下面是我的个人总结。

第一步:了解u3d的内存分配管理。
u3d有栈区和堆区。
栈区:存放较小、短暂的数据片段。跟一般stack般进行简单扩展和移除。
堆区:存放较大、较久的数据片段,和部分较小、短暂的数据片段。
申请内存时:
1、首先查看是否有闲置的内存(否->2)
2、释放(GC)不需要的内存,再次查看内存是否足够(否->3)
3、申请新的内存空间

第二步:GC机制。即用来回收不必要的内存,供再次使用。
调用GC的3种情况:1、内存不足;2、系统定时调用;3、手动调用(System.GC.Collect())
GC的步骤:
1、检查每一个对象;
2、检索当前对象的每个引用是否可以删除;
3、标记可以删除的对象;
4、删除被标记对象,回收内存。
GC的缺点:
1、内存碎片化,可能导致反复的GC,占用更大的内存;
2、帧率运行低。

第三步:避免GC的缺点。
3种指向:
1、减少GC的时间;2、减少GC的频率;3、在非敏感期主动GC。
3种策略:
1、减少堆分配和对象引用;2、减少申请内存频率;3、尝试控制GC和堆扩展的时间。
技巧和注意点:
1、缓存;2、反复调用的函数上不要进行堆内存分配(如:update());3、对象池;4、清除链表;(clear()使得链表复用)5、字符串(分组件(text分为不变部分和变化部分,不变部分分为一个组件)、stringBuilder、Debug.Log());6、使用compareTag;7、避免装箱操作(装箱操作会导致堆区中创建了一个System.Object的引用来存放该值类型的变量);8、协程(yield return null、new WaitForSeconds(1f)写成一个delay);9、结构体中包含string时,可写成数组。

第四步:profiler window可检测是否为GC导致游戏缓慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值