內存管理-內存佔用:
一般來說內存佔用大小有如下規律:VSS >= RSS >= PSS >= USS
VSS - Virtual Set Size 虛擬耗用內存(包含共享庫佔用的內存)是單個進程全部可訪問的地址空間
RSS - Resident Set Size 實際使用物理內存(包含共享庫佔用的內存)是單個進程實際佔用的內存大小,對於單個共享庫, 儘管無論多少個進程使用,實際該共享庫只會被裝入內存一次。
PSS - Proportional Set Size 實際使用的物理內存(比例分配共享庫佔用的內存)
USS - Unique Set Size 進程獨自佔用的物理內存(不包含共享庫佔用的內存)USS 是一個非常非常有用的數字, 因爲它揭示了運行一個特定進程的真實的內存增量大小。如果進程被終止, USS 就是實際被返還給系統的內存大小。
USS 是針對某個進程開始有可疑內存泄露的情況,進行檢測的最佳數字。懷疑某個程序有內存泄露可以查看這個值是否一直有增加
總內存爲Unity引擎所統計的真實物理內存分配,並不包含系統緩存和第三方庫的自身分配內存; 堆內存所指的是 Mono 管理和分配的託管堆內存; GFX內存爲用於渲染的資源所佔用的內存,主要包括紋理資源、網格資源、Shader資源等;
泄露風險其判斷依據主要爲檢測總內存的分配、各資源的內存佔用是否存在逐步增高的趨勢。
託管堆內存 :
表示項目運行時代碼分配的託管堆內存分配量。對於使用Mono進行代碼編譯的項目,其託管堆內存主要由Mono分配和管理;對於使用IL2CPP進行代碼編譯的項目,其託管堆內存主要由Unity自身分配和管理。目前,除iOS平臺外,其他平臺的絕大多數項目還在使用Mono來進行代碼編譯。
對於Mono堆內存來說,由於Mono自身的限制,其堆內存分配是 “只升不降” 的,即內存一旦分配給Mono,不論以後該內存是否繼續被使用,都不會再歸還給系統。因此,建議您對於代碼的堆內存分配進行嚴格的控制,避免不必要的Mono堆內存分配。
Reserved Total 和 Used Total 爲Unity引擎在內存方面的總體分配量和總體使用量
Android平臺:在客戶端最低配置以上,均需滿足以下內存消耗指標(PSS):
1)內存1G以下機型:最高PSS<=150MB
2)內存2G的機型:最高PSS<=200MB
iOS平臺:在iPhone4S下運行,消耗內存(real mem)不大於150MB