1. 程式人生 > >移動端測試===Android內存管理: 理解App的PSS

移動端測試===Android內存管理: 理解App的PSS

存儲器 什麽是 信息 圖片 == -s 使用情況 相同 src

Android內存管理: 理解App的PSS

原文鏈接:http://www.littleeye.co/blog/2013/06/11/android-memory-management-understanding-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值較低,它有助於減少那些機會。

移動端測試===Android內存管理: 理解App的PSS