UWA內存管理篇_常識(三)

內存管理-內存佔用:

一般來說內存佔用大小有如下規律: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章