宗熙先生谈内存(1):什么是内存命中率?命中率高有哪些优势?
原标题:宗熙先生谈内存(1):什么是内存命中率?命中率高有哪些优势?
导读:
作为央视知名主持人撒贝宁当下在圈内影响力超高逐渐在综艺圈发展的他现在一举一动都被外界所关注着显然和明星待遇一样走到哪里都能碰到粉丝月日撒贝宁全家合体同框外出逛街被偶遇一家六口幸...
作为央视知名主持人,撒贝宁当下在圈内影响力超高,逐渐在综艺圈发展的他,现在一举一动都被外界所关注着,显然和明星待遇一样,走到哪里都能碰到粉丝。7月25日,撒贝宁全家合体同框外出逛街被偶遇,一家六口幸福满溢,外籍岳父母罕见露面,温馨一幕被路人拍到。
一、前言
对于广大安卓手机用户来说,很多朋友都有这样一个困惑:不管手机搭载的运行内存是1GB、2GB、4GB、8GB还是更高,一开机什么程序都还没有运行,内存就已经“至少”使用了一半(请参阅上图),而电脑Windows操作系统都没有这么耗内存。
有些朋友对此 不满,在上经常能看到很多吐槽,认为这是由于安卓系统自身和APP开发得很糟糕所导致的。其实这种看法很片面狭隘,主要是对安卓系统的内存运行机制不理解所造成的,本文将用浅显的语言回答这个问题。
要理解安卓系统为什么很耗内存,首先要理解“内存的命中率”这个概念。
二、运行机制
计算机(或者手机等)在执行某个任务的过程中,CPU需要访问与之相关的数据。由于运行内存(以下均简称为“内存”)的性能要远高过于存储内存(或者称为硬盘),如果所需要的数据都保存在内存里面,CPU可以直接从缓存里面读取,性能无疑是最高的。
操作系统会尽量把各种所需要使用的潜在数据放在内存里,读取的时候也会优先从内存里读取。但是,(真实物理)内存容量是有限的,内存价格很贵,Windows操作系统自身和程序也越来越耗内存。
当所需要保存的数据缓存容量大于运行内存容量之后,Windows操作系统会抛弃一些低优先级的数据,将它们存储于虚拟内存(硬盘上)中,它的读取性能远不如保存在物理内存里面,这是一种退而求其次的做法。
三、如何理解“内存命中率”?
什么是内存的“命中率”呢?简而言之,内存命中率是指系统或应用程序在尝试访问数据时,从缓存中成功获取数据的次数占总访问次数的比例,比例越高越好。
如果数据在缓存中成功获取,则称之为“命中”,如果未成功获取,则称之为“未命中”。命中的结果是延时低、性能高,未命中的主要原因是所需要的数据目前没有保存在内存中,此时系统(或者应用程序)必须从较慢的存储设备中读取,程序才能继续运行,最终的结果就是延时高,性能差和速度慢。
四、内存命中率高有哪些优势?
也就是说,一个设备(包括电脑和手机)的内存命中率越高,性能也就越高,内存命中率高的优势和好处并不止性能,这一点在手机和企业级计算设备上的表现更为明显。
如果手机的内存命中率较低,说明在运行时很多所需要的数据不在缓存中,为了保证程序正常运行,就需要额外从磁盘中读取。而这个过程是要执行IO操作并消耗电力的,内存命中率较低不仅会导致手机变得卡顿,还会影响续航等等。
企业级服务器通常负责运行高负荷的数据库查询、高并发量的用户访问,如果内存命中率高,很多数据都可以直接从缓存中读取,可以减少对数据库的查询次数,降低服务器负载,提高并发处理能力,减少磁盘等设备的访问次数,降低能耗。
五、安卓系统为什么耗内存?
理解内存命中率这个概念之后,对于安卓系统为什么很耗内存这个问题就很好理解了。
因为它的运行机制是尽可能地把所需要的数据都保存到内存中,以提高内存命中率,提升手机的响应速度,减少IO读写,降低整体功耗,延长续航时间。——说白了,就是以空间换时间,以尽可能使用更多内存的方式来提升手机的整体体验。
有些朋友总是嫌安卓系统的内存使用率高,但是使用率低并不是好事,这意味着很多所需要的数据并没有保存在内存中,在真正需要用到这些数据的时候系统还需要从磁盘里去访问,在这种情况下,手机的性能和续航表现都会受到负面影响。
六、实际例子
这篇文章比较枯燥,大部分都是纯理论,也很不直观,小白读者可能很难理解,下面小编拿Windows操作系统举个例子。
谈到Windows操作系统的内存使用量,很多朋友可能都会立即不假思索地打开任务管理器,这里会详细显示目前的内存使用情况。比如说小编现在用来写作的这台机器,总共有32GB运行内存,显示目前只使用了11GB,看起来很轻松,富余量很大,相信有很多朋友也是这么认为的。
其实这里的数据是不足以客观、真实地反映计算机此刻的内存使用量的,11GB只代表目前已经实际使用的内存使用量,并不包括小编前文所说的“缓存”部分。
上图才是真实内存使用量,除了11GB(绿色部分)目前已经实际使用的运行内存之外,还有21GB(蓝色部分)属于“备用”,里面存储着“包含未活跃使用的缓存数据和代码的内存”,也就是小编之前所说的“缓存”,系统或者应用程序会优先从这个缓存部分读取数据。
虽然小编这台机器只使用了11GB内存,剩余的21GB也没有闲置,相反,如果小编只安装了8GB内存,那么就会造成内存命中率过低的情况,系统就需要频繁地硬盘中读取数据,性能就差。
七、补充说明
虽然本文介绍的重点是在运行内存中保存、缓存数据,但是请读者注意:这只是一个“狭隘”的角度,目的是为了尽量简化,便于读者理解。
事实上,可以用来保存缓存数据的硬软件机制并不止运行内存,比如说处理器也有二级和三级缓存、显卡也有缓存、操作系统和应用程序自身也有缓存,它们的运行原理和作用大致相同。
在运行高负荷应用程序(比如Adobe系列软件)时,系统往往会同时采用多种方式来保存缓存数据,而不只是保存到运行内存中这一种方式,在需要这些数据的时候,也会通过多种方式和渠道来读取调用。
运行内存只是缓存机制中的一种,一个子集而已,宏观来看,“内存命中率”应该叫“缓存命中率”,这样更准确、客观,这两个概念有一定的交集,也有很多区别。缓存命中率的幕后运行机制(包括分配、读取和释放)更为复杂,适用领域更广,小编将会在以后的文章中介绍。