輕松解決內存不足問題:ZRAM技術全面解析
在當今數字化時代,電子設備已成為我們生活中不可或缺的一部分。無論是手機、電腦還是平板,它們為我們的工作、學習和娛樂提供了極大的便利。然而,一個讓眾多用戶頭疼不已的問題卻如影隨形 —— 內存不足。
想象一下這樣的場景:你正在手機上一邊與同事激烈地討論工作方案,一邊查閱重要資料,還時不時地切換到社交軟件回復朋友的消息。突然,手機屏幕一滯,操作變得遲緩起來,每點擊一次都要等待許久才有反應,甚至有些應用還會直接閃退。這種情況是不是讓你心急如焚,工作效率大打折扣?又或者,當你在電腦上滿心歡喜地打開一款期待已久的大型游戲,準備盡情享受沉浸式的娛樂時光時,電腦卻像是老牛拉破車一般,運行得極為吃力,畫面卡頓,聲音也斷斷續續,原本的快樂瞬間化為烏有。
這些令人沮喪的狀況,歸根結底都是內存不足在作祟。隨著我們對電子設備依賴程度的加深,日常使用中所運行的應用程序數量越來越多,對內存的需求也水漲船高。當內存無法滿足這些程序同時運行的需求時,設備就會陷入卡頓甚至死機的困境,嚴重影響我們的使用體驗。為了解決這一難題,技術人員們不斷探索創新,而 ZRAM 技術便是其中的一項重要突破 。
一、ZRAM技術簡介
1.1概述
內存是計算機系統最重要的資源之一,當操作系統內存不足時,進程申請內存將會失敗,從而導致其運行異常或者崩潰。zram swap 主要原理就是從內存分配一塊區域出來用作 swap 分區,每次如果內存空間不夠了,不是把應用程序殺掉,而是把應用程序所占用的內存數據復制到 swap 分區,等切換回來的時候就可以直接把這部分數據恢復到內存當中,節省重新開啟所需的時間。
而被放到 swap 分區的應用程序,所占用的內存都是被壓縮過的,比如,微信在普通內存中占用 50 MB 的空間,如果壓縮率為 0.4,則放到 swap 分區里面的數據只需要 20 MB 的空間,這樣 swap 分區里面就可以存放更多后臺臨時不用的應用程序,變相擴展了內存的大小。
通過 swap 機制,系統可以將內存分配給需求更迫切的進程。但由于 swap 機制需要進行 I/O 操作,所以一定程度上會影響系統性能。那么是否存在一種能夠節省內存,而且對性能影響較少的機制呢?
在 Linux-3.14 引入了一種名為 zRAM 的技術,zRAM 的原理是:將進程不常用的內存壓縮存儲,從而達到節省內存的使用。如下圖所示:
圖片
zRAM 機制建立在 swap 機制之上,swap 機制是將進程不常用的內存交換到磁盤中,而 zRAM 機制是將進程不常用的內存壓縮存儲在內存某個區域。所以 zRAM 機制并不會發生 I/O 操作,從而避免因 I/O 操作導致的性能下降。
1.2ZRAM 技術是什么
ZRAM,這個聽起來有些神秘的技術,實際上是 Linux 內核提供的一項虛擬內存壓縮功能。簡單來說,它就像是一個聰明的 “內存管家”,能夠在內存緊張時大顯身手 。在計算機的世界里,當物理內存不足時,系統通常會將一些暫時不用的數據轉移到硬盤的交換空間中,這個過程被稱為磁盤分頁。然而,硬盤的讀寫速度與內存相比,簡直是天壤之別,這就導致一旦頻繁進行磁盤分頁,設備的運行速度會大幅下降,出現嚴重的卡頓現象。
ZRAM 的出現,巧妙地解決了這一難題。它通過在 RAM 內創建一個壓縮塊設備,將那些暫時不用的內存數據進行壓縮后存儲在這個設備上,也就是我們所說的分頁。這樣一來,在需要交換或分頁時,系統優先使用 ZRAM 這個壓縮塊設備,而不是直接使用硬盤上的交換空間,從而避免了在磁盤上進行分頁,大大提高了性能。形象地講,ZRAM 就像是給內存增加了一個 “壓縮倉庫”,當內存里的東西太多放不下時,就把一些不太常用的東西壓縮后放進這個 “倉庫” 里,等到需要使用的時候,再把它們解壓取出來。而且,由于這個 “倉庫” 就在內存里面,存取速度比從硬盤中讀取要快得多,這就使得設備在內存緊張的情況下依然能夠保持較為流暢的運行 。
從技術原理上看,ZRAM 利用了內存的快速讀寫特性和數據壓縮算法。當系統檢測到內存壓力時,會將一部分內存頁面數據傳遞給 ZRAM 模塊。ZRAM 模塊會對這些數據進行壓縮,然后將壓縮后的數據存儲在預先分配好的內存區域中,這個區域就形成了一個虛擬的塊設備,類似于磁盤分區,但速度卻比磁盤快很多。當應用程序需要訪問這些被壓縮的數據時,ZRAM 會及時將其解壓并返回給應用程序,整個過程對于應用程序來說是透明的,就好像這些數據一直都在正常的內存中一樣 。
二、ZRAM 技術的工作原理
由于zRAM 機制是建立在swap機制之上,而 swap 機制需要配置 文件系統 或 塊設備 來完成的。所以 zRAM 虛擬一個塊設備,當系統內存不足時,swap 機制將內存寫入到這個虛擬的塊設備中。也就是說,zRAM 機制本質上只是一個虛擬塊設備。
zRAM 的原理如下圖所示:
圖片
從上圖可以看出,在開啟了 zRAM 機制的情況下,當系統內存不足時,內核會進行如下操作:
- 通過 swap 機制從系統中查找一些進程不常用的內存。
- 將這些不常用的內存交換到 zRAM 塊設備中,而 zRAM 塊設備首先會對這些不常用的內存進行壓縮,然后存儲起來。
- 把不常用的內存壓縮存儲到 zRAM 塊設備后,swap 機制會把這些不常用的內存歸還給內核。
- 當進程訪問到這些被交換到 zRAM 塊設備的內存時,swap 機制將會通過 zRAM 塊設備解壓這些內存,并且重新建立與進程的地址映射關系。
2.1zram配置步驟
(1)內核配置
3.15 之前版本的 kernel
Device Drivers -> Staging drivers (STAGING [=y])
3.15 及之后版本的 kernel
Device Drivers -> [*] Block devices -> Compressed RAM block device support
具體的配置項如下:
CONFIG_RESOURCE_COUNTERS=y
CONFIG_MEMCG=y
CONFIG_MEMCG_SWAP=y
CONFIG_MEMCG_SWAP_ENABLED=y
CONFIG_MEMCG_KMEM=y
CONFIG_ZRAM=y
CONFIG_TOI_ZRAM_SUPPORT=y
CONFIG_ZRAM_DEBUG=y
(2)zram 塊設備個數設定
如果是將 zram 編譯成模塊,則可以使用下面命令動態加載,這個命令會創建 4 個設備 /dev/zram{0,1,2,3}
modprobe zram num_devices=4
如果是直接將 zram 編譯到內核,那只能在代碼里面直接修改 num_devices,3.15 之前的版本代碼路徑是 drivers/staging/zram/zram_drv.c,3.15 及之后的版本代碼路徑是 ./drivers/block/zram/zram_drv.c ,默認 zram 設備個數是一個。
(3)壓縮流的最大個數設定
這個是 3.15 版本及以后的 kernel 新加入的功能,3.15 版本之前的 zram 壓縮都是使用一個壓縮流(緩存 buffer 和算法私有部分)實現,每個寫(壓縮)操作都會獨享壓縮流,但是單壓縮流如果出現數據奔潰或者卡住的現象,所有的寫(壓縮)操作將一直處于等待狀態,這樣效率非常低;而多壓縮流的架構會讓寫(壓縮)操作可以并行去執行,大大提高了壓縮的效率和穩定性。
查看壓縮流的最大個數,默認是1
cat /sys/block/zram0/max_comp_streams
設定壓縮流的最大個數
echo 3 > /sys/block/zram0/max_comp_streams
(4)壓縮算法選擇
查看目前支持的壓縮算法
cat /sys/block/zram0/comp_algorithm
lzo [lz4]
修改壓縮算法
echo lzo > /sys/block/zram0/comp_algorithm
(5)zram 內存大小設定
分配部分內存作為 zram ,大小建議為總內存的 10%-25% 。
可以使用數值直接設置內存大小,單位是 bytes
echo $((512*1024*1024)) > /sys/block/zram0/disksize
也可以使用帶內存單位作為后綴的方式設置內存大小
(6)啟用 zram 設備為 swap
mkswap /dev/zram0
swapon /dev/zram0
(7)具體的 zram 相關對外接口說明
圖片
(8)系統運行之后的內存統計情況
cat /proc/meminfo
1 MemTotal: 1958596 kB
2 MemFree: 40364 kB
3 Buffers: 3472 kB
4 Cached: 328080 kB
5 SwapCached: 1908 kB
6 Active: 906752 kB
7 Inactive: 426648 kB
8 Active(anon): 752824 kB
9 Inactive(anon): 252756 kB
10 Active(file): 153928 kB
11 Inactive(file): 173892 kB
12 Unevictable: 2516 kB
13 Mlocked: 0 kB
14 SwapTotal: 524284 kB
15 SwapFree: 378320 kB
16 Dirty: 480 kB
17 Writeback: 0 kB
18 AnonPages: 1003452 kB
19 Mapped: 167052 kB
20 Shmem: 1184 kB
21 Slab: 83104 kB
22 SReclaimable: 24368 kB
23 SUnreclaim: 58736 kB
24 KernelStack: 48736 kB
25 PageTables: 41908 kB
26 NFS_Unstable: 0 kB
27 Bounce: 0 kB
28 WritebackTmp: 0 kB
29 CommitLimit: 1503580 kB
30 Committed_AS: 94718220 kB
31 VmallocTotal: 251658176 kB
32 VmallocUsed: 181352 kB
33 VmallocChunk: 251373156 kB
從 Line 14,15 可以看到 swap 相關的統計信息,SwapTotal 的大小就是 zram 設備的大小,當系統開啟了一段時間之后,就會將后臺的一些優先級低的應用數據(匿名頁面)壓縮存放到 swap 區,然后再重新打開這些應用的時候,再從 swap 區將它們的數據解壓出來。在 Android KitKat 版本之前,Android 設備因為沒有 zram,所以查看 /proc/meinfo 看到的 swap 分區的大小和統計數據都會是零。
1 Total RAM: 1958596 kB (status normal)
2 Free RAM: 724527 kB (504283 cached pss + 183244 cached kernel + 37000 free)
3 Used RAM: 1014008 kB (656204 used pss + 357804 kernel)
4 Lost RAM: 220061 kB
5 ZRAM: 27296 kB physical used for 145952 kB in swap (524284 kB total swap)
6 Tuning: 256 (large 512), oom 286720 kB, restore limit 95573 kB (high-end-gfx)
Line 5 也可以看到 swap 相關的統計信息,如果需要查看具體某個進程使用了多少 swap 空間,可以通過dumpsys meminfo pid(該進程的 id 號)查看。
2.2啟用zRAM
(1)創建 zRAM 塊設備
要啟用 zRAM,首先需要創建 zRAM 塊設備。要創建 zRAM 塊設備,可以使用以下命令:
modprobe zram num_devices=1
num_devices 參數可以指定創建 zRAM 塊設備的個數,上面命令創建了一個 zRAM 塊設備,可以通過路徑 /dev/zram0 來訪問這個塊設備。
(2)設置 zRAM 塊設備的大小
創建完 zRAM 塊設備后,可以通過以下命令來設置其空間大小:
echo 512M > /sys/block/zram0/disksize
上面命令設置了 zram0 的大小為 512MB,也就是說, zram0 能夠存儲 512MB 壓縮后的數據。
(3)壓縮算法選擇
zRAM 機制支持多種壓縮算法,不同的壓縮算法有不同的壓縮比率和壓縮速度,用戶可以按照自身的需求來選擇不同的壓縮算法。
要更改 zRAM 的壓縮算法,可以使用下面命令:
echo lzo > /sys/block/zram0/comp_algorithm
上面命令將 zRAM 的壓縮算法更改為 lzo
,我們也可以通過下面命令來查看內核支持哪些壓縮算法:
cat /sys/block/zram0/comp_algorithm
lzo [lz4]
從上面命令的輸出可知,內核支持 lzo 和 lz4 兩種壓縮算法。
(4)將 swap 交換設備設置為 zRAM
要將 swap 的交換設備設置為 zRAM 塊設備,可以使用以下命令:
mkswap /dev/zram0
當執行完上面這條命令后,內核將會使用 zram0
作為 swap 的交換設備。
三、zRAM技術的實現
zRAM 塊設備驅動的實現代碼主要在 drivers/block/zram/zram_drv.c
文件中,下面我們主要圍繞此文件進行分析。
本文并不會介紹塊設備驅動的編寫流程,只會分析 swap 機制在進行內存交換時,與 zRAM 塊設備驅動的交互。
3.1壓縮內存
當系統內存不足時,內核將會觸發 swap
機制。swap 機制首先會從系統中選擇一些進程不常用內存,然后將這些不常用的內存交換到 zRAM
塊設備中(使用 zRAM 塊設備作為交換設備的情況下)。
當 swap 機制將不常用的內存交換到 zRAM 塊設備時,會調用 zram_make_request() 函數處理請求。而 zram_make_request() 最終會通過調用 zram_bvec_write() 函數來壓縮內存,調用鏈如下:
zram_make_request()
-> __zram_make_request()
-> zram_bvec_rw()
-> zram_bvec_write()
我們來分析一下 zram_bvec_write() 函數的實現,其代碼如下:
static int
zram_bvec_write(struct zram *zram, struct bio_vec *bvec, u32 index, int offset)
{
...
// 1. 獲取需要進行壓縮的內存
page = bvec->bv_page;
...
user_mem = kmap_atomic(page);
uncmem = user_mem;
...
// 2. 對內存進行壓縮
ret = zcomp_compress(zram->comp, zstrm, uncmem, &clen);
...
// 3. 獲取壓縮后的數據
src = zstrm->buffer;
...
// 4. 申請一個內存塊保存壓縮后的數據
handle = zs_malloc(meta->mem_pool, clen);
...
cmem = zs_map_object(meta->mem_pool, handle, ZS_MM_WO);
// 5. 將壓縮后的數據保存到新申請的內存塊中
memcpy(cmem, src, clen);
...
// 6. 將壓縮后的數據登記到 zRAM 塊設備的表格中
meta->table[index].handle = handle;
...
return ret;
}
為了簡化分析過程,我們對代碼進行精簡。從上面的代碼可以看出,zRAM 機制對內存進行壓縮的步驟如下:
- 獲取需要進行壓縮的內存,需要進行壓縮的內存由 swap 機制提供。
- 通過 zcomp_compress() 函數對內存進行壓縮,src 指針指向壓縮后的內存地址。
- 通過 zs_malloc() 和 zs_map_object() 函數申請一塊新的內存塊,大小為壓縮后數據的大小。
- 將壓縮后的數據復制到新申請的內存塊中。
- 將壓縮后的數據記錄到 zRAM 塊設備的表格中。
由于 zRAM 塊設備是建立在內存中的虛擬塊設備,所以其并沒有真實塊設備的特性。真實塊設備會將存儲空間劃分成一個個塊,而 zram_bvec_write() 函數的 index 參數就是數據塊的編號。此參數有 swap 機制提供,所以 zRAM 塊設備驅動通過 index 參數作為原始內存數據的編號。
一圖勝千言:
圖片
zRAM驅動有個數據塊表,用來記錄原始內存數據對應的壓縮數據,此表的索引就是數據塊的編號。swap 機制會維護此表格的使用情況,如哪個塊是空閑的,哪個塊被占用等。
當內存頁被壓縮后,swap 機制將會把原來的內存頁釋放掉,并且把所有映射到此內存頁的進程解除映射,細節可以參考 swap 機制相關的資料。
3.2ZRAM性能優化方式
(1)模擬塊設備
從技術實現的角度來看,ZRAM 本質上是一個非常獨特的塊設備驅動 。它采用了一種巧妙的方式,使用內存來模擬 block device,也就是塊設備。在整個系統的內存管理體系中,ZRAM 將內存回收的重要策略放心地交給內存管理模塊,因為內存管理模塊在長期的發展和優化中,已經具備了非常成熟和高效的內存回收算法,能夠根據系統的實際運行情況,合理地回收不再使用的內存資源,確保系統內存的高效利用。
對于壓縮和解壓縮這一關鍵的操作環節,ZRAM 則依賴于專業的壓縮庫。這些壓縮庫經過精心設計和優化,擁有多種高效的壓縮算法,能夠根據不同的數據類型和特點,選擇最合適的壓縮方式,在保證數據完整性的前提下,盡可能地提高壓縮率,減少數據占用的內存空間。同時,在需要使用數據時,壓縮庫也能夠快速地將壓縮數據解壓縮,恢復成原始數據,滿足應用程序的使用需求。
而 ZRAM 自身的內存分配工作,則由 zsmalloc 負責。zsmalloc 是專門為 ZRAM 設計的內存分配器,它充分考慮了 ZRAM 在內存緊張環境下的工作需求。在內存緊張時,傳統的內存分配器可能會因為高階內存分配不到而失敗,導致 ZRAM 無法正常工作。但 zsmalloc 通過獨特的設計,能夠在這種情況下更好地工作,它嘗試將多個相同大小的對象存放在組合頁(稱為 zspage)中,并且這個組合頁不要求物理連續,從而大大提高了內存的使用率,確保 ZRAM 在內存緊張的情況下也能穩定運行 。
(2)數據壓縮存儲
當應用程序在運行過程中產生內存頁時,這些內存頁首先會被傳遞到 ZRAM 模塊。ZRAM 模塊會對這些內存頁進行仔細的分析和處理,然后運用高效的壓縮算法對其進行壓縮。以 Android 手機為例,當你連續打開多個應用時,系統的空閑內存會持續下降。此時,ZRAM 就會發揮它的強大作用,它會把最近最少使用的頁面識別出來,比如淘寶應用的頁面,如果它是最近最少使用的,原本占用 100M 的匿名頁,經過 ZRAM 的壓縮算法處理后,可能只需要占用 40M 的空間,通過這樣的壓縮操作,一下子就節省了 60M 的內存空間 。
壓縮后的內存頁會被存儲到 zram 塊設備中,這個過程就像是把整理好的物品存放到一個專門的倉庫里。當應用程序后續需要訪問這些內存頁時,ZRAM 會快速響應。它首先會檢查所需的數據是否已經在 zram 塊設備中,如果存在,就直接從 zram 塊設備中讀取壓縮數據,然后迅速進行解壓縮操作,將解壓縮后的數據返回給應用程序使用。整個過程非常高效,對于應用程序來說,幾乎感覺不到數據是從經過壓縮存儲的 zram 塊設備中獲取的,就好像這些數據一直都在正常的內存中隨時可供使用一樣 。
(3)多數據流并發優化
在早期的內核版本中,對壓縮流的設置相對較為單一。例如在 3.15 老版本內核中,雖然提供了接口給上層設置最大壓縮流,但這種設置方式在實際應用中存在一定的局限性,無法充分滿足系統對于并發性能的需求。隨著技術的不斷發展和對系統性能要求的不斷提高,從 4.19 內核開始,底層內核做出了重大改進,針對各個 CPU 都配置了一個壓縮數據流 。
這樣做的主要目的是為了極大地優化系統中并發的情況。當系統中有多個寫壓縮操作同時發生時,每個操作都能夠獨享一個壓縮數據流。通過這種多數據流的設計方式,系統能夠同時處理多個并發的壓縮操作,大大提高了系統在高并發場景下的處理能力和效率。
舉例來說,當你的電腦在同時運行多個大型軟件,每個軟件都有大量的數據需要進行內存壓縮處理時,多數據流并發優化機制就能夠讓這些軟件的壓縮操作同時高效進行,避免了因為壓縮流不足而導致的操作等待和系統卡頓,確保系統在復雜的多任務環境下依然能夠保持流暢運行 。
四、ZRAM技術的優勢及應用場景
4.1ZRAM 技術的優勢
(1)提升系統性能
在內存不足的設備上,ZRAM 技術就像是一位救星,能夠顯著提升系統的性能 。與傳統的磁盤 swap 相比,ZRAM 具有無可比擬的速度優勢。傳統磁盤 swap 在內存不足時,會將內存數據轉移到硬盤的交換空間中,而硬盤的讀寫速度遠遠低于內存。在這種情況下,系統的響應速度會變得極為遲緩,就像一輛原本高速行駛的汽車突然陷入了泥潭,每一個操作都變得艱難無比。
而 ZRAM 技術則另辟蹊徑,它將壓縮后的數據存儲在內存中,這就避免了磁盤 I/O 操作帶來的巨大延遲 。當系統需要調用被交換出去的數據時,ZRAM 能夠在極短的時間內將壓縮數據解壓并返回給應用程序,使得系統的響應速度大幅提升。以一款老舊的 PC 電腦為例,它的內存較小,在同時運行多個程序時,傳統磁盤 swap 會讓系統卡頓得幾乎無法操作。
但在啟用 ZRAM 技術后,即使打開多個大型文檔、運行音樂播放器和瀏覽器等多個程序,系統依然能夠保持相對流暢的運行,程序之間的切換也變得迅速,大大提高了用戶的工作和娛樂效率 。
(2)提高內存利用率
ZRAM 技術通過其獨特的壓縮技術,能夠在有限的內存空間中存儲更多的數據,從而有效地 “擴大” 了可用內存容量 。這一優勢在實際應用中表現得非常明顯。比如,在一臺配備 4GB 內存的電腦上,同時運行多個應用程序時,內存很快就會被占滿。假設一個應用程序占用 500MB 的內存空間,在沒有 ZRAM 技術的情況下,這 4GB 內存可能只能容納 8 個這樣的應用程序。
但當啟用 ZRAM 技術后,通過壓縮算法,原本占用 500MB 內存的應用程序,經過壓縮后可能只需要占用 200MB 的內存空間 。這樣一來,同樣是 4GB 的內存,就可以容納 20 個這樣經過壓縮存儲的應用程序,大大提高了內存的利用率,使得系統可以在內存壓力下運行更多的進程,用戶也能夠更加自由地進行多任務操作,無需頻繁關閉應用程序來釋放內存 。
(3)延長存儲設備壽命
對于使用 SSD 或嵌入式存儲設備的用戶來說,ZRAM 技術還有一個重要的優勢,那就是能夠延長存儲設備的使用壽命 。在傳統的內存管理方式中,當內存不足時,系統會頻繁地將內存數據寫入硬盤的交換空間,也就是我們常說的 Swap 分區。這種頻繁的讀寫操作會對硬盤造成較大的損耗,尤其是對于 SSD 這種有寫入壽命限制的存儲設備來說,頻繁的寫入操作會加速其老化,縮短其使用壽命 。
而 ZRAM 技術的出現,改變了這一局面。它將數據壓縮后存儲在內存中,減少了對硬盤的讀寫次數 。以一款使用 SSD 的筆記本電腦為例,在日常使用中,如果頻繁進行大文件的讀寫、多任務處理等操作,沒有 ZRAM 技術時,硬盤的讀寫次數會非常頻繁,可能在幾年后就會出現性能下降甚至損壞的情況。但當啟用 ZRAM 技術后,大部分的內存交換操作都在內存中完成,大大減少了對硬盤的依賴,從而有效地延長了硬盤的使用壽命,讓用戶能夠更長時間地享受穩定的存儲服務 。
4.2ZRAM 技術的應用場景
(1)嵌入式設備
在嵌入式設備的領域中,內存和存儲資源常常面臨著極為緊張的局面。以常見的智能攝像頭為例,這類設備通常被設計得小巧輕便,以便于安裝和使用,這就導致其內部空間有限,無法容納大容量的內存和存儲設備。然而,智能攝像頭需要實時處理大量的圖像數據,包括圖像采集、編碼、傳輸以及存儲等多個環節,這些操作都對內存和存儲有著較高的需求 。
在這種內存和存儲受限的情況下,ZRAM 技術就成為了提升設備性能的關鍵。當智能攝像頭的內存空間不足時,ZRAM 能夠迅速介入,將暫時不用的內存數據進行高效壓縮,然后存儲在 ZRAM 設備中。這樣一來,不僅避免了頻繁的磁盤 I/O 操作,因為磁盤的讀寫速度相對較慢,頻繁操作會嚴重影響設備的響應速度,而且還能減少對存儲設備的磨損。對于嵌入式設備中常用的閃存等存儲介質來說,其寫入壽命是有限的,頻繁的寫入操作會加速其老化,而 ZRAM 技術通過減少磁盤 I/O,有效地延長了存儲設備的使用壽命,使得智能攝像頭能夠更加穩定、持久地運行 。
(2)Android 系統
Android 系統作為全球使用最為廣泛的移動操作系統之一,其用戶數量龐大,應用場景也極為豐富。在日常使用中,用戶常常會同時打開多個應用程序,例如在瀏覽新聞資訊的同時,還會接收社交軟件的消息通知,并且可能后臺運行著音樂播放、地圖導航等應用。這種多任務的使用場景對手機的內存管理提出了極高的要求,如果內存管理不善,就容易出現應用卡頓、閃退等問題,嚴重影響用戶體驗 。
為了解決這一難題,Android 系統從 4.4 版本開始默認采用了 ZRAM 技術。當用戶在手機上開啟多個應用導致內存緊張時,ZRAM 技術就會發揮作用。它會自動識別出那些最近最少使用的應用程序所占用的內存頁面,然后對這些頁面進行壓縮處理。例如,當你打開了微信、淘寶、抖音等多個應用后,系統內存逐漸減少,ZRAM 會將微信中暫時不用的聊天記錄頁面、淘寶的商品緩存頁面等進行壓縮,原本占用較大內存空間的這些頁面,經過壓縮后占用的內存大幅減少。這樣,就為其他正在運行的應用程序釋放出了更多的內存空間,使得手機在多任務場景下依然能夠保持較為流暢的運行,應用之間的切換也更加迅速,大大提升了用戶的使用體驗 。
(3)內存受限的老舊 PC
隨著科技的飛速發展,計算機硬件的更新換代速度越來越快。然而,對于許多用戶來說,手中的老舊 PC 由于各種原因,如預算有限、對電腦性能要求不高等,仍然在繼續使用。這些老舊 PC 往往存在內存容量較小的問題,例如早期的電腦可能只有 1GB 或 2GB 的內存 。
在當今的軟件環境下,許多應用程序對內存的需求越來越高。一款普通的辦公軟件在運行時可能就需要占用幾百 MB 的內存,而如果再同時打開瀏覽器、音樂播放器等多個程序,內存很快就會被耗盡,導致電腦運行緩慢,甚至出現死機的情況。此時,ZRAM 技術就為這些老舊 PC 提供了一種經濟實惠且有效的性能改善方案。通過啟用 ZRAM 技術,老舊 PC 可以在不增加硬件成本的前提下,將一部分內存空間劃分出來作為 ZRAM 設備。當內存不足時,系統將暫時不用的數據壓縮后存儲到 ZRAM 設備中,從而在一定程度上緩解內存壓力,使得電腦能夠更加流暢地運行多個應用程序,滿足用戶日常辦公、娛樂等基本需求 。