Slua內(nèi)存管理

關(guān)于內(nèi)存:

在創(chuàng)建C#對象push到lua前,slua都會把對象存放到ObjectCache,引用著,防止被釋放。

舉個栗子說明:

創(chuàng)建一個Gameobject A,然后給A增加一個Image組件,Image綁定一張Texture2D B,那么馬上Destroy A,即便執(zhí)行了C#的內(nèi)存回收,也不會回收掉紋理B的內(nèi)存。因為ObjectCache依舊引用著紋理B,但是ObjectCache中A和它的組件會置為null。

這時,需要執(zhí)行l(wèi)ua的collectgarbage, 才能把紋理B從Cache里去除,從而把內(nèi)存降下來。

簡單來說,你在lua中操作過的每一個對象都會記錄在ObjectCache里(組件也是對象),當(dāng)你Destroy后,ObjectCache的記錄會為null(這是C#做的,Dictionary中key為弱引用),但是你Destroy對象,不代表能把內(nèi)存清理干凈,例如上面栗子中的紋理B,它在lua中被創(chuàng)建出來,是需要執(zhí)行l(wèi)ua的GC,才能把B清理掉。

還有切場景,切場景會主動釋放場景中的對象,這里是C#進行的,不管lua有沒引用著(所以還是會出現(xiàn)類似"野指針"的問題)

至于<不在場景>中的對象會不會自動釋放 ? 我還需要測試下,個人推測是受lua引用影響的,所以如果創(chuàng)建了紋理之類的資源,不要用全局變量引用,而是用local,然后就等待切場景時GC自動回收

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,246評論 0 38
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,697評論 18 399
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,800評論 11 349
  • 【李嘉誠說】一件衣服被我穿上了,80%的人都說好看,那我一定會買!一個生意機會被我遇上了,80%的人都說可以做,那...
    酒簍子傳奇閱讀 1,944評論 0 0
  • 工作中生活中一定會遇到各種各樣的事,發(fā)生問題的時候不要忍著,表達出來,讓對方知道,也讓自己釋然,有時候不說心里...
    姜楊A(yù)da閱讀 291評論 0 0

友情鏈接更多精彩內(nèi)容