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