Android手机诞生至今10年,发展过程之迅速比起PC市场有过之而不及,硬件上的长足发展让我们使用Android手机的体验越来越好。不过大家也发现Android系统对于手机内存的需求就像个无底洞,给多少用多少,眼下就看见市面几乎不见2GB内存的Android手机,这到底是为什么?究竟多大容量的内存才能满足Android的胃口?
Android系统使用内存多,究其原因,这是与Android采用Linux内核有密切关系,而Linux与windows在内存管理有着巨大区别。
提到Android的内存管理,我们不得不提起Linux内核,因为Android系统内核就是从Linux内核修改过来的,继承了Linux内核优点以及主题框架,同时Android为了适应移动设备需求,在文件系统、内存管理、进程间通信机智和电源管理方面进行了修改,添加了相关的驱动程序和必要的新功能。Android在很大程度上保留了Linux的基本架构,因此Android系统的内存管理与Linux具有很高相似度。
用着Android手机的你会发现,刚开机手机内存就占到一半以上,似乎空闲内存很少,大家就着急地开始狂杀后台进程释放内存,避免内存不够造成卡顿。虽然表面上内存不够用了,但其实这是Linux内存管理的非常优秀特性,Linux会无视物理内存容量,只要你给多大,它就会物尽其用,会把一些常用的数据从闪存上预先写入到内存中,利用内存高速的读写性能提高数据访问性能,间接地提高了我们应用启动、运行速度。
但我们常用的Windows系统却不是这样,它只有在需要用到内存的时候才会给对应的进程分配内存,所以你会有一种错觉,Windows不吃内存,而用Linux内核的Android却非常占用内存。
所以Android系统占用内存多其实是个好事情,去年手机内存4GB起步,到今年6GB起步,甚至出现8GB内存,Android都将能充分利用起来,发挥了硬件规格提升带来的好处,而Windows将其视为摆设,尽管你插满4根槽32GB内存。
这就是为什么我们的2GB内存Android手机,开机只剩500MB空闲,而4GB内存Android手机开机还是只有1.5GB左右的空闲内存,因为其内存管理用得太“精明”了,有多少用多少。
Android系统内存究竟是怎么调度的?——垃圾回收机制
我们都知道Android上的应用都是基于Java而来,每启动一个应用就会产生相应一个虚拟机,Android对这些dalvik虚拟机内存作出硬性限制,这个限制非常严格,早期Android就限制在32MB,目的是迫使应用程序使用较小内存,让内存常驻更多的进程,提高整个系统响应速度,而且程序启动时候不需要从闪存加载到内存中,启动速度自然提升。
但进程申请的空间超过上限阈值时,就会触发“内存杀手”规则,为了保护用户使用体验,只会按顺序销毁优先级较低的进程来释放物理内存,让新加入、高优先级程序获得更多内存。
但是一些大型应用程序,比如游戏真的很需要大内存怎么办?随着Android手机硬件疯狂升级,祖传2GB内存已经入不了厅堂,Google取消了32MB硬性要求,放宽上限。同时程序员是有办法绕开整个虚拟机内存限制的,但过程非常复杂,这里就不展开说,主要是利用了Android系统内的native heapsize不受限制特性。
那么按照目前我们使用习惯来看,Android系统到底多少GB内存才够用?
2008年第一台Android手机HTC Dream G1只有192MB的内存,十年后的今天已经出现了8GB内存的手机,难道40倍的内存增长才能够满足今天的应用需求吗?非也,只是对于Android系统来说内存是多多益善。
目前对于不同Android 7.0系统以上手机来说,手机开机后,光是“Android操作系统”、“Android系统”、“系统用户界面”等进程就占用了1.2-2GB内存,所以2GB内存手机必然频繁进行内存回收,进而影响到手机流畅度,所以2GB内存手机越来越少了。
作为一部智能手机,你不可能只用来打电话、收短信,微信、微博、支付宝等都是相当必要的手机APP,所以我们手机后台都普遍存在十数个应用。下面来看看常见手机APP的内存占用情况。
常规手机App对内存占用都在300MB左右,功能特别丰富的可能要到500MB,游戏普遍上1GB。
下面让我们来看看不同内存大小手机开机后的剩余内存,加上一些必要的应用内存占用,我们方可得到一个可供参考的内存需求量。
目前手机内存需求=Android系统必要 大型游戏 应用后台待机×15
=2000MB 1000MB 50MB×15
≈3.75GB
可见4GB内存对于目前Android系统手机来说必不可少。既然4GB就够了,现在中端机普及6GB,高端上8GB意义何在?
非常有意义!因为APP对于内存占用是动态的,其中就包含了一些图片素材,对于1080P分辨率手机就加载1080P素材,而2K就加载2K素材,显然分辨率越高,素材容量越大,当然对内存占用越大。
你想想索尼还有4K分辨率的Xperia XZ2 Premium手机,内存越大,系统就不会频繁回收内存,减少CPU占用,提高流畅有莫大帮助。6GB/8GB内存显然更加游刃有余,况且厂商宣传上也好看。不记得“GT 630 4GB”的故事吗?而且内存越大越不一定代表手机性能越好!
好了,又到了总结陈词的时候啦。如果你平常就聊聊天、刷刷微博,玩玩《天天爱消除》、《欢乐斗地主》,4GB内存足矣;如果你喜欢玩《绝地求生》、《荒野行动》这类大型游戏,那么4GB内存的Android手机是起步而已。
另外关于手机内存,大家都有些疑惑,再来讲一讲题外话。
为什么越来越多手机都自带进程管理软件?
在内存剩余不多时打开大型程序时会触发系统自身的调进程调度策略,这是十分消耗系统资源的操作,特别是在一个程序频繁向系统申请内存的时候。这种情况下系统并不会关闭所有打开的进程,而是选择性关闭,频繁的调度自然会拖慢系统。
比方说你需要运行《绝地求生:刺激战场》这类大型游戏,对于内存占用必然是巨大的,如果你主动关闭一些没用的进程释放内存,可以确保大型游戏更为流畅的运行。但是正常情况下你是不需要去管它,由Android系统的内存管理模块自动管理即可。
内存里这么多进程待着,不会更加耗电吗?
Google早就考虑到这一点,当应用被切换到后台时,只会冻结它切换前最后一刻的运行状态,此时不会再消耗CPU资源,只有那种后台继续执行任务的应用才会消耗资源,比方说是你在后台播放音乐、导航之类的。因此这个设计本来就是为了适应手机多应用切换的,当你切换回程序时,不必再次加载界面资源,启动速度更快,体验更好。