UE4 Unlua源码解析12 - Lua与UE4的混合GC

Posted 珞珈大胖强TURBO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4 Unlua源码解析12 - Lua与UE4的混合GC相关的知识,希望对你有一定的参考价值。

Lua与UE4的混合GC


我们知道,UE4中实现了AddReferencedObjects接口,或者用UPROPERTY宏标记的对象,会被纳入自动GC管理中,当没有对象引用此Object时,自动GC,Lua也是类似,当一个表没用其他对象引用的时候,会自动GC,那么Unlua中,我们可以看到UObject除了被UE引用,还会被Lua端引用,那么假如什么都不管,UE的对象在不被引用的时候自动GC,但是Lua还引用他,便会访问到脏数据,那么Unlua是怎么解决的呢?

怎么做到Lua中持有的UE对象,不被UE GC

Lua对象在和UObject绑定的时候,会在代码中将UObject加入不GC的对象FGCObject的ReferencedObjects,这样,确保了Lua中访问的UObject对象实例不会被UE GC自动回收

怎么做到Lua中停止持有UE对象时,UE也能GC掉

当Lua中停止持有UE对象时,需要手动调用Destroy方法

Destroy对应C方法UObject_Release

可以看到在ReleaseAttachedObjectLuaRef方法中移除了Registry引用,并且把UE对象从AttachedObjects移除

怎么做的UE中持有的Lua对象,不被Lua GC

UE中使用Lua对象的时候,会主动把Lua对象加入到Lua全局表Registry中,确保Lua GC时标记时通过引用链中找到该Lua对象,防止被回收

怎么做到UE中停止持有Lua对象时,Lua能GC掉

也就是从UE中,把Lua对象从全局REGISTRY表中移除

以上是关于UE4 Unlua源码解析12 - Lua与UE4的混合GC的主要内容,如果未能解决你的问题,请参考以下文章

UE4 Unlua源码解析12 - Lua与UE4的混合GC

UE4 Unlua源码解析8 - Lua与C++之间的参数转换的实现原理

UE4 Unlua源码解析8 - Lua与C++之间的参数转换的实现原理

UE4 Unlua源码解析8 - Lua与C++之间的参数转换的实现原理

UE4 Unlua源码解析11 - 非UE4反射支持的静态类导出给Lua使用原理

UE4 Unlua源码解析1 - 读源码的前置知识