iOS 运存机制

很多使用iphone的孩纸,可能并不了解iphone的内存使用分配原理。今天转载一篇网友的文章,来扫盲一下。

标注来源:http://tieba.baidu.com/p/2667751512

引援文章通篇都是比较浅显文字在说明,所以这里也依然用最白话的方式来解释一下iOS内存机制。

1.为什么iOS的RAM一直都是最少的但iOS却又是最最流畅的?

先明白一个基本概念,iOS和Mac OS都是基于UNIX开发的系统,这和windows有着很大的不同,包括内存机制,这便是为何不能拿windows的使用习惯来看待iOS。另外要注意,iOS没有系统缓存。

首先看看内存的意义何在,内存的介质就是高速闪存,它比外存的速度要快不少。通过将程序加载到内存后让处理器在一个更快的读写环境下处理数据,从而提升系统性能。还要先明白的是内存仅是让软件流畅运行的条件之一,处理器才是决定性因素。内存就好比瓶子的容量,处理器就是瓶颈,瓶子里装再多水瓶口不够大那水流的依旧很慢。

在iOS中,撇开联动内存和可用内存不讲,所有在内存里的程序都是被标记为活跃内存或者非活跃内存的。活跃内存可以先简单理解为正在前台运行的软件以及刚退出不久的软件所占用的内存,这些数据是当前最活跃的(读写频率最高的)。而非活跃内存即是系统记录的你经常使用的软件所占用的内存,当前处理器并没有读取它们,但它们仍然被放在内存里处于“待命”状态,方便你下一次使用这些软件时处理器能直接从内存读取数据,而不必花费更多时间先从外存调到内存再读取。

重点在这,当iOS检测到你当前运行的软件需要更多活跃内存时(实际上软件向处理器请求更多内存),系统会选择性地释放掉后台软件占用的非活跃内存,转而提供给当前软件。如何释放是根据你的使用习惯来定,比如你经常用QQ,其次是微信。那么当前台内存不足时系统会优先释放掉微信占用的内存,若还不够则继续释放QQ所占用的内存。可以假设,如果有个软件占用的内存大到要占满整个RAM,那么系统则会释放掉所有非活跃内存全部提供给这个软件使用。这便是为何你不用担心玩游戏什么的会因为内存不足而卡顿了,因为只要这个游戏有需要,就算是需要所有内存系统都会马上提供给你,不过你若不玩这游戏了那这些内存又会马上提供给其他程序。

这种内存释放机制是有“预见性”的,并非只在内存不足时临时释放。iOS会根据你的使用习惯等数据来分析,在你打开一个软件时立即准备足够内存供其使用,若该软件运行时又需要更多内存才会临时释放更多。iOS7甚至能根据你的使用习惯来预先加载常用软件,所以iOS用的时间越长就越顺手(当然,记录用户使用习惯这种特性并不是只有苹果才有)。而且iOS的内存管理十分严格,任何第三方App都没有权限直接调用设备上的硬件,也就是说内存分配与释放都是处理器说了算,任何第三方软件都没有权限去占用固定内存(除非越狱),不会出现例外。自然就不会像windows里一些不规范软件那样,程序已经关闭连但内存还一直占着。

这便是区别所在,iOS里所有第三方程序都不可能一直占用内存,一旦系统需要更多的活跃内存,就会强制释放后台非活跃内存提供给前台。而windows不同,一个在运行的软件你若不关闭它就会一直在内存里运行。既然iOS里的程序不可能一直占着内存,那iOS岂不是没有“后台运行”这一说法了么?iOS也的确不能后台,不像windows那样能一边前台看着电影一边后台干着其他事情。事实上,在iOS内,当一个软件从前台转入后台后5秒内便会完全停止运行,极少数特殊软件能运行10秒,某些需要后台下载功能的软件在转入后台后也最多继续下载10分钟。这就是某种意义上所谓的的“伪后台”。

2.什么是墓碑机制?

我们现在用着的iphone后台功能大概就是这么个尿性。这里要借用一下Windows phone里的一个名词——墓碑机制。

何为墓碑机制?好比大家能从某一个人的墓碑上了解到该人活着时是个什么鸟样,但这个人其实已经挂了。也就是说当一个程序被系统从内存移除后,系统允许这个程序给自己立个“墓碑”,记录自己“生前”的样子,等你要让这些程序“复活”的时候,系统会照着它墓碑上那鸟样给他重新加载到内存里去。“墓碑”状态下的程序们不会占用CPU,不会占用内存,甚至不会产生功耗。也能称之为“后台挂起”,差不多那个意思。这就是为什么你长时间不用浏览器后再打开它时,你会发现页面重新加载了一次但网页并没有刷新,也是为什么iOS的后台功能需要软件的支持才能实现。iOS就是用这种方式实现的后台,同时又保证内存的。

综上所述,在iOS这样的内存管理机制下,你完全不必担心软件会因为分配到的内存不足而卡顿,因为任何软件被放在前台时都有权限向处理器要求尽量多的内存。所以在iOS里,你完全没有必要去手动清理后台程序来释放内存,iOS会自动释放。相反iOS比你更“聪明”,它知道该释放哪些程序的内存,何时释放,释放多少,而自己手动清理内存完全是多此一举。至于那些所谓的内存清理软件所列出的后台程序所占内存,那也并不是实际被占用的内存,多数都是那些程序所请求的内存大小。

3.那iphone端的清理内存的软件是干啥的?

前面也说了,iOS里的软件是没有权限直接调用硬件的,那么内存清理软件又是如何实现清理内存功能的?当你使用内存清理功能时,它会一直向处理器请求尽量多的内存,处理器便尽量将后台里的内存释放出来供它使用,等它最大限度的获得了内存后,再自己释放掉自己占用的这些内存......这就完了。本质上讲,iOS的内存清理软件并不是“清理”了内存,而是先将其他软件“挤出”内存后再把内存让出来。

我们再反观内存的意义:是为了让CPU能更高效的读取数据,才将程序直接存放在内存里的。而你却秉着“让系统更快”的原则隔三差五把内存里的程序全抹掉,等你要用那些程序时系统还得先从外存调到内存然后才能开始读写,你说这是快了还是慢了?

最后可能有人会问:虽然iOS这种机制能保证每个软件都最大限度地使用内存,但如果有个游戏所需要的运存超过了设备所配备的RAM那怎么办?在这里要说的是,你觉得苹果会批准一个他们设备带不动的软件上架App Store么?

4.最后来点总结?

大的内存对于iOS来说也并非完全没有意义,起码这能为设备一个运行更大型的软件创造一些条件。但内存不是决定性条件,若苹果让iPad具备了运行更大型软件的处理能力,那自然会给它一个够用的内存。如今的手机软件还没有哪个能一口气占满1G内存的。电脑上显卡的显存大家都知道吧?一个独立显卡,就算才512M的显存对90%的人来说都够了,而且电脑跑的还是x86游戏,ARM上的软件能占不了多少内存。

还有人一定肯定准备回答说:如果苹果加大内存然后换真后台的话不是更好吗?这里只能说,安卓就是真后台,你可以同时运行几个软件,但你不得不牺牲一些流畅度。并且安卓给软件提供的权限太高,你在享受高度“自由”的同时却得防着流氓软件霸着你的内存不让。所以在苹果有办法不影响到现在流畅度的同时提供真后台之前,你就只能接受这种后台。既然目前只能是伪后台那你觉得大内存的作用能多大呢。这里没有说安卓和windows不好,而是说不同的机制都有不同的好处,但同时又有他们相对应的弊端。

这些问题不是简单的好或不好就能评价的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,119评论 29 470
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,387评论 25 707
  • 有一个人很幸运,离开爸妈的怀抱来到一个陌生的城市生活。一直平平淡淡的生活着,然而这些平坦的路是背后亲人早已铺好的路...
    wuli娇妹阅读 447评论 0 0
  • ――关于“分享”的一点儿感悟 其一,刚在“刘老师心理工作室”群里,看到他今天的原创分享文章“让人无语的...
    箫音声声阅读 165评论 0 0
  • 这几天的忙碌可以说是焦头烂额,串串出差的两天我也没轻松啊,加班加班无尽头…… 我心里很清楚,这个加...
    车前小草阅读 212评论 0 0