Unity中的GC及其优化

本文探讨了Unity中GC的工作原理,包括堆内存分配、GC执行过程及带来的问题。针对这些问题,提出了如何定位堆内存分配、减少GC时间和频率以及避免垃圾产生的优化策略,如缓存、对象池、减少字符串操作等。
摘要由CSDN通过智能技术生成

=====堆内存分配时候,unity做了什么:

1.首先,Unity检查堆上是否有足够的空闲内存,如果有,则该变量的内存被分配;

2.如果没有,Unity触发GC试图释放未使用的堆内存,这个操作可能很慢。如果GC之后堆内存足够,则该变量的内存被分配;

3.如果GC之后堆上还是没有足够的空闲内存,Unity将向操作系统申请更多内存以扩大堆大小。这个操作可能很慢。之后该变量的内存被分配

所以,堆分配可能会很慢,特别在必须执行GC和扩大堆大小时。

=====GC时,发生了什么:

当堆变量超出作用域后,存储该变量的内存并没有被立即释放。无用的堆内存只在执行GC时被释放。

每次执行GC时,将执行以下步骤:

  • 垃圾收集器检索堆上的每个对象。
  • 垃圾收集器搜索所有当前对象引用以确定堆上的对象是否仍在作用域内。
  • 不在作用域内的对象被标记为删除。
  • 删除被标记的对象并将内存返回给堆。

GC是个费时的操作,堆上的对象越多,代码中的引用数越多,GC就越费时

=====GC带来的问题

1.最明显的问题是GC可能花费相当长的时间来运行(如果堆上有很多对象和大量的对象引用要检查,则检查所有这些对象的过程可能很慢。 这可能会导致我们的游戏卡顿或运行缓慢)

2.GC可能在不合时宜的时刻被触发(如果CPU在我们游戏的性能关键部分已经满负荷了,那此时即使是少量的GC额外开销也可能导致我们的帧速率下降和性能问题。)

3.堆内存碎片化ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值