内存&虚拟内存
内存,即为随机存取存储器(英语:Random Access Memory,缩写:RAM)内存主要是和 CPU(处理器)直接交换数据的。
首先,还是问大家这两个问题:你的手机内存(“运存”)有多大?你认为安卓手机多大的内存够用?
首先,果子说下自己的答案,我正在使用的小米 10 Pro 搭载的为 12G 内存,真实可用大小为 11596M 。
果子认为:在目前正常情况下,12G 内存已经足矣。继续增大其实对实际体验影响微乎其微,还不如多做内存优化。
而最近大家应该也有看到了,目前各大手机都陆续推出了内存融合(扩展)技术,在用户现有内存下“扩大”容量。
甚至,中兴高管吕钱浩还暗示将推出 20G 内存手机!
看到这里果子默不作声,拿起自己的手机,反手将手机内存再扩充了 20G !
现在 32G 内存的手机来了,还可以更大,但没必要!
这内存扩展到底是个什么东西?它究竟是营销噱头,还是说可以真正提升用户体验?它有什么优劣?
废话不多说,咱们来好好聊聊。
* 三星 12G 内存芯片
严格的讲:内存就是内存,没有运行内存这一说法。设备所有的软件、进程都需要在内存中运行。
因此,想要手机打开应用快、不杀后台。就需要高速以及大容量内存。现在部分游戏手机都用上 18G 物理内存了。
而当时早期的安卓手机,由于技术原因,2G 内存都算的上旗舰配置,而大众群体大多是 1G 甚至 512M 的内存配置。
并且,由于 Android 系统是基于 Linux 的,因此那时候就出现了最早的安卓内存扩展概念,即虚拟内存。
同 Windows 一致,安卓的虚拟内存原理也异曲同工。也是通过在存储空间划分一部分空间,充当 RAM 使用。
如果,你是一位老安卓发烧友,一定记得上面这两个软件。
没错,这就是 2014 年前后盛行的内存扩展软件。
果子翻出自己的老古董 红米1s 依旧可以正常运行。
在那个普遍硬件性能不高的年代,利用内存扩展软件,提升了一大批手机的应用体验,杀后台,挂不住应用的状况有所缓解。
内存扩展原理
但是,内存扩展依旧是有局限性的。
其实现原理即为在本地分配交换分区后,生成一个对应大小的 swap 文件,所占用的存储区域就被称为虚拟内存。
在设备使用过程中,依旧会优先使用真实内存,当内存不足时,系统就自动释放不常用的应用,并将其保存在 swap 空间中。
当用户切回应用时,系统自动从 swap 空间读取数据,再恢复到真实内存中,最终实现交换。
简单的来讲,正因为交换分区的存在,虚拟内存并不是越大越好。
如同文章开始所展示的,果子已经在 /data/ 目录下创建了 20G 的虚拟内存,通过检测工具测试可正常加载使用。
但是在真实使用下表现如何呢?
在打开一波应用后,我们发现,即使手机物理内存占用高达近 80% ,交换分区的虚拟内存依旧处于较低的占用。
因此,这里就不得出提出另一个关于虚拟内存调度的概念 swappiness 。
简单的来讲,swappiness 的数值对应使用虚拟内存的权重,该数值越大,系统就会越积极的使用虚拟内存。
有人可能会说:那直接调整到最积极,不就能多使用虚拟内存了?但事实并非这么简单。
首先,就是速度问题,由于使用存储作为内存,即使今天的 UFS 闪存芯片,其 I/O 性能依旧不如物理内存。
其次,由于 swap 交换分区的特性,不可能随时优先使用虚拟内存。
并且 swappiness 值过大,会导致后台进程频繁回收释放,并载入存储的情况。(下文会详细解释)
优劣总结
优点:
对于目前的主流设备而言,适量的内存扩展,确实可以提升后台能力,提升使用体验。
目前各家的定制系统,由于动画、动态渲染等视觉效果会占据更多的资源。并且,目前许多品牌为了极致的性价比,依旧使用 6G 内存。
因此,低内存设备的体验确实不能让人满意,而现在引入内存扩展,可缓解这些问题。
缺点:
目前,虚拟内存读写性能不如物理内存,很容易出现切换应用后,停顿一下才加载出来的情况,造成体验的割裂感。
而且,如果想提升手机的后台能力,就需要使用更大的虚拟内存权重。
这就越容易出现后台应用频繁回收资源到存储空间,而上述的卡顿会越发严重。
并且,虚拟内存并不是越大越好,占额外空间就不说了。许多时候杀后台并不是内存不够用了,而是系统的内存策略问题(点名 MIUI )。
虚拟内存不管多大,能使用的都是都很有限的,果子就已经删除了 20G 的虚拟内存,娱乐一下而已。
还有一点:由于内存的特性,长时间都会处于读写状态。因此,会一定程度减少闪存(存储空间)的寿命。
不过这个大家不用过于担心。目前而言,闪存寿命足矣维持到你换下一台手机的时候。前不久 ColorOS 官方也回复过该疑问。
总得来讲,目前各大厂商推出内存扩展,并不是什么新鲜东西,虽可以解决一部分用户的体验问题,但具体效果还是因人而异的。
最后果子想说:整这么大的内存闹哪样啊?需要整治的是目前的毒瘤应用环境!