欢迎光临散文网 会员登陆 & 注册

杰视帮 《角色合成系统班》2022期

2023-04-01 10:06 作者:假面卡推应援会  | 我要投稿

当一个线程被注册到垃圾回收器中,GC会把这个线程栈中的所有对象当成“根”对象。让我们看下那个线程中生成出来的原生代码(在HelloWorld_AnotherThread_m4函数中):

AnyClass_t1 * L_0 = (AnyClass_t1 *)il2cpp_codegen_object_new (AnyClass_t1_il2cpp_TypeInfo_var); AnyClass__ctor_m0(L_0, /*hidden argument*/NULL); V_0 = L_0;

我们能看到一个局部变量: L_0。GC必须将其视为“根”对象。在这个线程的短暂的执行过程中,这个“AnyClass”对象和其所引用的其他对象所占用的内存空间不能被GC回收另作他用。绝大部分在栈上的变量对于GC来说都是“根”对象,因为这些变量所在的函数都是在一个线程中被执行的。

当线程退出的时候,il2cpp_gc_unregister_thread函数被调用,用来告知GC这些对象已经不是“根”对象了。因此GC可以通过回收L_0来释放AnyClass所占用的内存空间。

静态变量


杰视帮 《角色合成系统班》2022期的评论 (共 条)

分享到微博请遵守国家法律