一、Mono原理
此處簡單介紹下Mono這個奇葩,主要通過Mono可以輕松實現跨平台,目前使用Unity開發手游Android平台大多使用Mono實現,但是誅仙手游使用il2cpp技術。具體il2cpp知識大家可以度娘。
二、內存分配機制
上圖為內存分配策略,但是在此結合實踐經驗有bug存在,當分配大塊內存特別明顯,來回分配與切換應用會崩潰,主要是GC不夠及時即使是每次分配完手動GC也不會立即釋放。
三、內存泄漏原因
Mono是如何判斷已用內存中哪些是不再需要使用的呢?是通過引用關系的方式來進行的。Mono會跟蹤每次內存分配的動作,並維護一個分配對象表,當GC的時候,以全局數據區和當前寄存器中的對象為根節點,按照引用關系進行遍歷,對於遍歷到的每一個對象,將其標記為活的(alive)。
四、內存優化
1、分配內存盡量小,避免申請大塊內存,一旦多個大塊內存同時存在並且無法釋放,則會導致內存過高應用崩潰。
2、靜態類對象及時卸載
五、參考文章:
[1]http://wetest.qq.com/lab/view/135.html