簡介
當(dāng)游戲運行時,使用內(nèi)存存儲數(shù)據(jù)。當(dāng)數(shù)據(jù)不再需要時,存儲這些數(shù)據(jù)的內(nèi)存被釋放,以便重新使用。我們把已經(jīng)存儲了數(shù)據(jù),但是已經(jīng)不再使用這些數(shù)據(jù)的內(nèi)存叫做垃圾。我們把重新使得這些存儲垃圾的內(nèi)存變的可用的過程叫做垃圾回收。
Unity使用垃圾回收作為內(nèi)存管理的一部分。如果垃圾回收執(zhí)行的太頻繁或者垃圾太多,那么我們的游戲可能會性能較差。這意味著垃圾回收是很常見的引起性能問題的原因。
在這篇文章中,我們將學(xué)習(xí)垃圾回收怎樣工作,在什么時間發(fā)生,以及怎樣有效率的使用內(nèi)存以便把垃圾回收對我們游戲的影響降到最低。
Unity內(nèi)存管理概述
為了理解垃圾回收怎么樣工作以及什么時候發(fā)生,我們必須首先理解內(nèi)存使用在Unity中是怎么工作的。Unity管理內(nèi)存的方法叫做自動內(nèi)存管理。這意味著我們的代碼不需要明確的告訴Unity怎么樣在細節(jié)上去管理內(nèi)存。Unity替我們做了這些。
在本質(zhì)上,Unity中的自動內(nèi)存管理是這樣工作的:
-Unity在兩種內(nèi)存池中存?。簵?nèi)存和堆內(nèi)存。棧用來存儲短期的和小塊的數(shù)據(jù),堆用來存儲長期的和大塊的數(shù)據(jù)。
-當(dāng)一個變量創(chuàng)建時,Unity在?;蚨焉仙暾堃粔K內(nèi)存。
-只要變量在作用域內(nèi)(仍然能夠被我們的代碼訪問),分配給它的內(nèi)存表示在使用中。我們稱這塊內(nèi)存已經(jīng)被分配。我們描述一個變量被分配到棧內(nèi)存為棧上對象,一個變量被分配到堆內(nèi)存為堆上對象。<