已剪辑自: https://www.zhihu.com/question/49745023/answer/146711713
出于众所周知(并不)的原因,我最近认真了解了一下6GB内存到底有没有用。所以今天,我这个不务正业以抖机灵为生的机构号终于要输出干货了。
这个问题是2016年提的,那个时候确实是有意义的,因为当时配备6GB内存的手机相当少,整个生态环境没有跟上,大内存显示出优势的场景非常有限。但是在2017年就不是这么回事了。因为内存这个东西,不像处理器,在某种意义上说,是不存在"过剩"这个问题的。只要产业链开始铺货新的规格,软件对内存的需求一定会迅速跟上,水涨船高。
就拿我们最熟悉的微信举例,从2.3版本到6.5版本的迭代中,随着手机主流内存规格的不断上涨,微信的内存占用也从30M增加到了227M,足足增加了6倍多。
(数据通过下载安智市场微信各历史版本实测得到,原谅我的渣作图)
处理器现在显得过剩的原因不是因为我们不需要那么高的性能,很大程度上是因为电池技术迟迟难以突破,压在上面,限制着手机的整体功耗。所以虽然有了高性能处理器,但是大多数应用对性能的需求不会跟着成比例的涨。
而内存不同,一旦硬件上的技术和成本开始可以支持更大的内存,应用对内存的开销一定会跟上。因为在现阶段,占用更多的内存确实可以换取更好的性能,更多的功能,或者更短的开发时间,对续航也没太大影响。也就是说,整个生态环境对内存的需求一定会增长并适应新的主流内存大小。毕竟,硬件环境已经有了,也可以给用户更好的体验,为什么不呢?
这就是为什么我说2016年的 6GB 优势场景或许不多,而2017 年的 6GB 对提升体验已经非常实用的原因了。因为随着今年 6GB 内存的普及,应用在开发的时候,也会适应新的硬件环境,增大内存开销,获取更好的体验。如果相应的手机配置不跟进的话,一定会在某些环境下捉襟见肘。
其实安卓生态本身的变化史就是一部内存开销的增长史。不说别的,就说安卓系统本身,从07年安卓Beta版首次发布至今,将近10年时间里,从当初1.0原生系统仅占用100M内存,到现在6.0、7. 0系统开机就会吃掉近2GB的内存,足足翻了20倍!
上图是实测的现在安卓手机常用app的内存占用量。以4GB手机为例,系统占用内存在1.8G左右,倘若再挂着微信微博QQ,听着歌一边刷网页一边刷知乎,这内存就差不多到头了,再开应用有些后台就会被杀掉。其实4GB的内存真的已经没有那么宽裕了。
所以随着工业界量产内存规格的增长,系统和程序体量也会水涨船高。而越来越大的系统和应用,会倒逼手机厂商在新生产的手机中配备更高的内存,这是一个相互促进,螺旋上升的过程。2017年如果还想在使用手机时不会因为运存不够而感到掣肘,确实是需要配备 6GB了。(好吧,起码我厂是这么想的。)
最后给大家科普两个我这两天研究内存问题学到的tips:
一、当系统运存小于等于一定值(这个定值大于0,在我们的手机里大概是300M)的时候,系统就会自动根据应用程序的重要程度(ADJ值),由轻往重逐级去杀,直至留出足够的运行内存。这种资源回收的机制是安卓系统所规定的,留出的这个定值是给电话这种手机基础功能和开启新的应用准备的。
在关闭进程的时候,不同应用的重要层次结构可以分为5个类别,分别是空进程、后台进程、服务进程、可见进程和前台进程,这里面第一个重量级最低,往往会被首先回收,越往后越重要。(更详细的分级介绍可参考https://developer.android.com/guide/components/processes-and-threads.html)在我上面举例的情况中,网页就会首先被杀掉。
二、很多人都经历过:"我内存很大,明明只开了几个程序,还有1GB多的RAM,为什么放后台还是被杀死了呢?"
其实你的后台很有可能不是被杀死,而是被"开屏"了。导致你误以为程序被杀死以至于应用重启。
很多情况下,程序是需要连接服务器来加载一些数据,例如淘宝的商品推荐,饿了么的外卖店家,微博等等。数据越大,加载的时间就得越久,而当数据还没被加载出来的时候,会非常影响当前画面的展示,致使用户体验变差,就像这样。
于是乎,很多应用会选择在数据加载完成之前,"盖"上一张开屏图来掩饰部分板块的空白,这就造成了程序重启的假象,实则是程序依旧在后台运行。正如很多人切换回微博的时候,也会弹出开屏图,可一旦进去后就会发现页面依旧停留在当初浏览的地方,这就是一个拿开屏图"盖"主页面的一个比较常见的例子。但是这个真的不是内存的锅,再大的内存都会这样,更多的是网速和应用优化的问题。
感谢阅读。