美文网首页
UE4垃圾回收

UE4垃圾回收

作者: 侑虎科技 | 来源:发表于2020-11-19 17:01 被阅读0次

UE4引擎为我们搭建了一套UObject对象系统,并且加入了垃圾回收机制,使我们用C++进行游戏开发时更加方便,而且游戏本身也可以极大程度地避免内存泄漏问题。

UE4引擎采用了标记-清扫垃圾回收方式,是一种经典的垃圾回收方式。一次垃圾回收分为两个阶段:第一阶段从一个根集合出发,遍历所有可达对象,遍历完成后就能标记出可达对象和不可达对象了,这个阶段会在一帧内完成;第二阶段会渐进式地清理这些不可达对象,因为不可达的对象将永远不能被访问到,所以可以分帧清理它们,避免一下子清理很多UObject。比如,Map卸载时就会发生明显的卡顿。

GC发生在游戏线程上,对UObject进行清理,支持多线程GC。

对GC可以设置若干参数,比如MaxObjectsInGame,规定了游戏中最大存在的UObject对象(对编辑器不生效),移动平台上默认设置了131072。当UObject数量超过这个阈值时,游戏会崩溃,其他详细参数可见UGarbageCollectionSettings、GarbageCollection.cpp和UnrealEngine.cpp中相关的属性。

下图为标记-清扫的工作原理:



1.1 GC何时进行

UE4引擎中GC可以分为主动引发自动引发两种方式。

1.1.1 主动引发

可以在执行一些操作时手动调用GC。比如,卸载一个资源后,立即调用一次GC进行清理。

游戏中可以调用ForceGarbageCollection来让World下次Tick时进行垃圾回收,也可以直接调用CollectGarbage进行垃圾回收(引擎中大部分情况都用这种方式主动引发)。

1.1.2 自动引发

游戏中,大部分的垃圾回收操作都是由UE4引擎自动引发的,普通情况下不需要手动调用GC,这也是理想的GC使用方式。

当World进行Tick时,会调用UEngine::ConditionalCollectGarbage()函数,函数中进行了一些判断,当满足GC条件时,才会执行GC。下面分析一下ConditionalCollectGarbage的执行逻辑。


课程免费完整版可前往UWA学堂查看~

相关文章

  • UE4垃圾回收

    UE4引擎为我们搭建了一套UObject对象系统,并且加入了垃圾回收机制,使我们用C++进行游戏开发时更加方便,而...

  • 简单理解垃圾回收

    什么是垃圾回收? 垃圾回收的是什么? 如何判断为垃圾? 垃圾是怎样被回收的? 垃圾回收哪些区域的内存? 什么是垃圾...

  • JVM(二) GC算法与分代回收策略

    可达性分析 GCRoot场景 垃圾回收算法 分代回收策略 引用 垃圾回收 垃圾回收(Garbage Collect...

  • JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比

    谈垃圾回收器之前,要先讲讲垃圾回收算法,以及JVM对垃圾的认定策略,JVM垃圾回收器是垃圾回收算法的具体实现,了解...

  • 01垃圾回收机制

    垃圾回收(Garbage Collection,GC) 垃圾回收就是释放垃圾占用的空间 内存的动态分配和垃圾回收,...

  • Java 垃圾收集(GC)浅谈

    Java 垃圾收集(GC)浅谈 为什么需要垃圾回收?哪些内存需要回收?什么时候回收?如何回收? 为什么需要垃圾回收...

  • JVM垃圾回收机制

    JVM垃圾回收 整体思维导图 带着问题理解JVM垃圾回收机制 Java为什么需要垃圾回收机制; 回收哪部分垃圾; ...

  • 垃圾回收

    如何查看当前JVM使用的垃圾回收器? 如何指定使用CMS回收? 如何打印回收日志? 垃圾回收过程 CMS垃圾回收的...

  • JVM常见垃圾回收器介绍

    垃圾回收器简介 在新生代和老年代进行垃圾回收的时候,都是要用垃圾回收器进行回收的,不同的区域用不同的垃圾回收器。分...

  • JavaScript的垃圾回收机制

    大纲 1、认识垃圾回收机制2、垃圾回收机制的原理3、垃圾回收机制的标记策略4、垃圾回收机制与内存管理 1、认识垃圾...

网友评论

      本文标题:UE4垃圾回收

      本文链接:https://www.haomeiwen.com/subject/ibzvbktx.html