1. 程式人生 > >[譯]Android記憶體管理: 理解App的PSS

[譯]Android記憶體管理: 理解App的PSS

Android記憶體管理: 理解App的PSS

當在應用程式上執行Little Eye時,在記憶體檢視中,會報告有關應用程式記憶體的3個重要統計資訊。 Dalvik記憶體使用情況,即Java堆消耗的記憶體量,Native記憶體,即JVM外部程序使用的記憶體量。

然後是第三個統計量,被稱為“PSS”。 什麼是PSS?

Propotionate Set Size(比例集大小)

“比例集大小”是Android系統計算的統計資訊,以確定是否要殺死您的程序。 只看你的應用程式消耗多少記憶體,是不正確的方式,因為你的應用程式可能與其他程序使用一些共享記憶體,責怪你的應用程式正在使用任何共享記憶體是“不公平”的。 Android系統可能會殺死使用太多記憶體的應用程式(尤其是如果應用程式在後臺),因此Android系統需要找到一種方法來可靠地計算應用程式負責的記憶體量。

什麼是共享記憶體?

Android是一個基於Linux的系統,Linux使用“共享”頁面來跨程序共享相同的記憶體。 共享記憶體的一個常見用途是在程序之間共享“程式碼”記憶體頁(載入只讀可執行程式碼的記憶體區域)。 外部庫和JVM的可執行程式碼是可以跨程序安全共享的記憶體區域的示例。 還可以是資料頁,其是“寫時複製”,其可以在程序之間臨時共享,直到一個程序修改共享儲存器。

技術應用“真實”記憶體使用

因此,為了“公平”技術應用使用的記憶體,Android使用了PSS統計量。基本上,它是您的應用程式消耗的非共享記憶體和可以“歸因於您的應用程式”的共享記憶體部分(與其他程序共享的記憶體)/(分享共享記憶體的程序數量)的和。

現在,Android有一個“更公平”的方式來計算誰消耗了大量的記憶體,Android將按照PSS由大到小的順序開始殺死程序。

作為一個開發者意味著什麼?

如果你的應用程式得到非常高的PSS分數,你的應用程式可能會被Android系統殺死。 也許這是你可以處理的東西,但是在後臺被意外殺死可能會對你的應用程式造成影響,特別是如果你依靠一些後臺Activity或Service來進行工作。 確保您的應用程式的PSS不是太高,特別是當您的應用程式進入後臺。 進入後臺後,釋放不在吸引的記憶體和物件,並斷開任何不再需要的共享記憶體,你不再需要,可能是一個好主意。 這將減少你的意外被Android系統殺死的機會。

要記住的一點是,PSS沒有“硬限制” - 不能保證你的應用程式超過某個閾值將被殺死,或者保證低於某個閾值可以生存。 應用程式不在前臺時,必須做好任何時間被殺死的準備。如果PSS值較低,它有助於減少那些機會。