fuchsia.memorypressure

已新增:7

專家

供應商

定義於 fuchsia.memorypressure/memorypressure.fidl

註冊通訊協定

註冊監看員

用於註冊記憶體壓力等級變更。watcherProvider 用來傳送層級變更訊息給用戶端的記憶體壓力 Watcher 管道。

呼叫此方法後,目前的記憶體壓力等級會立即傳送至監看工具。

建議您為元件樹狀結構中的根工作註冊變更,不要讓樹狀結構中分別執行不同的工作,如果用戶端數量較少,有助於將同時傳送大量記憶體壓力訊息造成的系統流失降到最低。此外,工作的背景資訊越豐富,控管其樹狀結構中子項工作的行為,就越能回應記憶體壓力。

要求

名稱類型
watcher Watcher

Watcher

定義於 fuchsia.memorypressure/memorypressure.fidl

監看程式通訊協定 可供用戶端在記憶體壓力等級變更時收到通知。

OnLevel 已變更

當記憶體壓力等級變更時,系統會傳送至已註冊的用戶端。level:表示目前的記憶體壓力等級。

初始連線也會透過 RegisterWatcher 叫用,讓新註冊的用戶端可以找到目前的記憶體壓力等級。

觀察器必須立即回覆訊息,確認已收到層級變更通知,並啟動了必要的動作。然後,可能在傳送確認後,繼續以非同步方式收回記憶體。

以下是一些適用於客戶的實用指南:

  1. 只有在供應商收到與上一則訊息相對應的回覆之後,監看程序才會收到新的壓力等級變化通知。如果在這段時間內發生了多層級轉換,監看員將收到最新的壓力等級通知。

  2. 層級變更會受到邊緣觸發,而用戶端應會維持本機狀態以追蹤目前的壓力等級 (如有需要)。例如,工作可能會收到 CRITICAL 等級的通知,並因此捨棄其所有快取。之後的一段時間,可能會想觸發系統,導致系統分配一定數量的記憶體。此時,工作應記住看到的最後壓力等級是「CRITICAL」,且不會觸發耗用大量記憶體的活動。

  3. 基於效能最佳化考量,供應商可能會決定某些壓力等級變動時略過訊息傳送作業。舉例來說,在飛越 NORMAL / WARNING 邊界時,可能無法在每次轉換時通知用戶端。在這種情況下,供應商可能會限制訊息頻率。同樣地,供應商可能會決定在相同壓力等級 (尤其是「嚴重」) 傳送重複訊息,表示需要採取進一步行動。

要求

名稱類型
level Level

回應

<空白>

表情符號

等級嚴格

類型:uint32

定義於 fuchsia.memorypressure/memorypressure.fidl

表示記憶體壓力等級。

名稱說明
1

記憶體壓力等級健康。

已註冊的用戶端可自由保留快取內容,並分配記憶體不受限制。

但是,用戶端應留意,不會在過渡回降至 NORMAL 時主動重新建立快取,導致記憶體激增而立即將層級再次推送至 WARNING。

2

記憶體壓力等級有點限制,如果取消勾選,可能會跨越重要壓力範圍。

註冊的用戶端應將作業最佳化來限制記憶體用量,而非達到最佳效能,例如減少快取大小及非必要的記憶體配置。

用戶端必須謹慎控管工作的工作量,才能收回記憶體,並確保不會導致明顯的效能降低。存在一些記憶體壓力,但為了收回記憶體,對使用者而言沒有回應靈敏度的合理性。

3

記憶體壓力等級相當有限,

已註冊的用戶端應會捨棄所有非必要的記憶體,並且避免分配更多記憶體。否則可能會導致工作終止。如果發生全域記憶體壓力,系統會重新啟動。

用戶端可能會視需要執行費用高昂的工作來收回記憶體,因為如未這麼做,可能會導致終止。在這種情況下,客戶可能會認為成效命中很合理。