杰視幫 《角色合成系統(tǒng)班》2022期
2023-04-01 10:06 作者:假面卡推應(yīng)援會(huì) | 我要投稿
當(dāng)一個(gè)線程被注冊(cè)到垃圾回收器中,GC會(huì)把這個(gè)線程棧中的所有對(duì)象當(dāng)成“根”對(duì)象。讓我們看下那個(gè)線程中生成出來的原生代碼(在HelloWorld_AnotherThread_m4函數(shù)中):
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;
我們能看到一個(gè)局部變量: L_0。GC必須將其視為“根”對(duì)象。在這個(gè)線程的短暫的執(zhí)行過程中,這個(gè)“AnyClass”對(duì)象和其所引用的其他對(duì)象所占用的內(nèi)存空間不能被GC回收另作他用。絕大部分在棧上的變量對(duì)于GC來說都是“根”對(duì)象,因?yàn)檫@些變量所在的函數(shù)都是在一個(gè)線程中被執(zhí)行的。
當(dāng)線程退出的時(shí)候,il2cpp_gc_unregister_thread函數(shù)被調(diào)用,用來告知GC這些對(duì)象已經(jīng)不是“根”對(duì)象了。因此GC可以通過回收L_0來釋放AnyClass所占用的內(nèi)存空間。
靜態(tài)變量
標(biāo)簽: