【Unity/笔记】垃圾回收GC

本文介绍了Unity中的垃圾回收机制GC,重点讨论了托管堆与栈的区别,以及GC的工作原理和主要步骤。内容包括: Mono堆内存管理、GC如何影响游戏性能、面临的问题以及可能的优化策略。通过理解GC,开发者可以更好地管理内存,减少不必要的性能损耗。
摘要由CSDN通过智能技术生成

垃圾回收GC(Garbage Collection)

  • 托管资源的分配

    1. CLR在运行时管理着一段内存地址空间(虚拟地址空间,在运行中会映射到物理内存地址中),分为“托管堆”和“栈”两部分。
    2. 栈一般用于存储值类型数据,它会在方法执行结束后自动销毁其中引用的值类型变量,当数据被存储在堆栈上的时候,只需要简单地在其后进行扩展。当数据失效的时候,只需要将其从堆栈上移除。
    3. 托管堆用于引用类型的变量存储,是垃圾收集的关键阵地。
    4. 对于Unity开发而言,GC是Mono运行时提供的垃圾回收机制,而非引擎的,GC所管理的是Mono的托管堆,而Unity的assets内存管理Unity有自己的内存堆。

    Unity游戏运行时内存占用分以下几部分:

    1. Mono堆: C# 代码
    2. Native堆:资源,unity引擎逻辑,第三方逻辑。
    3. 库代码:Unity库,第三方库。

    这其中Mono堆相关的内存管理,也就是GC机制是我们作为开发者需要密切关注的。

  • Mono托管堆的运作原理
    通常游戏开发过程中,mono会对托管堆内存进行分配和管理,托管” 的本意是Mono可以自动地改变堆的大小来适应你所需要的内存,并且适时地调用GC(垃圾回收)操作来释放已经不需要的内存,从而降低开发人员在代码内存管理方面的门槛,但同时开发者也自己可以手动调用GC。
  • GC的主要步骤

    1. 停止所有需要mono内存分配的线程。
    2. 遍历所有已用内存,找到那些不再需要使用的内存,并进行标记。
    3. 释放被标记的内存到空闲内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值