转载自:http://bbs.feng.com/read-htm-tid-8305194.html 原作者:deathpain

文章开头更新一下,此篇文章并非为苹果洗地,个人观点苹果坚持使用1G内存的主要原因是成本控制和控制手机“强制报废”的年限,以及让下一代手机“更具有吸引力”。文章的目的是为了解释苹果为什么可以做到用如此低的配置能达到如此高的使用体验,让大家免于“纠结内存才1G”之苦。

再次更新下苹果使用1G内存但是不会卡的原因:Android 系统运行应用使用的是 Java 环境, 因此需要额外的内存来做垃圾回收 (garbage collection). 也就是当一个 Android 应用结束运行之后, Java 需要额外内存来回收该应用占去的内存. 一般来说, 在内存充裕的系统上, 这个机制运行得还不错. 一旦运行大批不同的应用, 问题就出现了. 以下表格显示, 一个 Android 应用理论上使用一份内存, 但是事实上却需要四份到八份的富余给 Java 去做回收, 系统才能够达到流畅. 开很多 Android 应用会卡卡卡卡卡, 就是这个原因.
这样我们就可以理解为什么 Android 机型要配置海量内存了, 因为更多内存消耗更多电力, 自然厂商也不得不增加电池容量, 来保证续航时间. 而 iOS 系统从设计开始, 就不是这样的垃圾回收机制, 而是应用要求多少就分配多少. 所以 Android 旗舰机型是人前风光宣传自己海量内存加大容量电池, 人后暗暗辛酸落泪.

首先声明一下,本人并非IOS程序员,不过本人的朋友正好在做IOS软件开发,并参与过多次开发者大会,此为背景。

虽然不是苹果死忠,但是本人对苹果产品也十分有兴趣,于是彻夜等待果6发布会,等到参数爆出来那一刻跟大家一样忍不住吐槽,尼玛都1080P了,为啥内存还是1G,这不要人命么!我把这话说给我朋友听,他立马就说IPHONE根本用不着2G内存,原因如下:

苹果给每个应用程序设置20M的内存警告量,30M的闪退量,游戏会略微放款10~20M,需要向系统申请。
这一条说明除了系统本身占用内存以外,任何程序几乎都不可能占用超过50M内存。←此句我着重解释一下,因为大家问题比较多,本来就是为了让更多纯小白玩家明白才这么写的。如果您完全不明白我说什么,无视红字即可。实际上,不是单个程序存在50M的内存使用上限,而是单线程使用上限是50M,同一个程序可以加载多个线程,同一个程序可以使用多个线程。剩下的我就不细说了。

关于后台,他是如下解释的:
苹果设计本身就没有后台,当你把程序最小化的时候程序就暂停了一切活动。如果应用想继续运行一部分功能的话,必须向系统申请运行时长,或者调用系统功能,比如音乐播放。由此跟安卓需要大内存来支持后台运行的区别就显而易见了,因为安卓是在Linux上跑的Java虚拟机,他的内存管理机制是申请之后就一直在那放着,等一个Runtime周期结束之后会自动收回不必要的内存。

关于大型软件退回到主页以后再次进入不是最小化,而是直接重启的原因,我本来认为是内存溢出导致程序崩溃,在闪退以后释放内存并重新加载导致的程序重启,不过我朋友不同意此观点,解释如下:
“大型游戏崩溃是因为绝大部分程序员是从Java转过来的,在进入背景的时候,有一个application Did Backgroung这么一个方法,他们会在这里进行想要的内存申请工作,以便达到他们期待的后台运行的目的,但是在applicationDidBecameActive的时候却没有把握好页面加载的时机,一次性把全部资源加载进内存导致超出系统允许范围,就崩溃了。”这句话结合本文第三段来看,确实很好的解释了为什么有的游戏会崩溃,尤其是多平台游戏,而苹果独占游戏几乎没有闪退的原因。

不知道上面的帖子对大家有没有帮助,简而言之的话,就是苹果只要不出真正的后台运行,它就基本上不会把内存提升到1G以上。当然或许也有可能是系统自身运行需要1G以上的话,苹果也是会推出大内存版的。

威锋首发,转载请注明出处

另外如果有任何问题,我可以代大家向我

看大家都云里雾里的,有的童鞋还说我给苹果洗地,我再简要的说明一下苹果为什么不用2G内存:
我朋友说,IOS只要不彻底重新编写的话,苹果几乎不可能开放海量内存,因为它既不支持真后台,又给APP设置了50M的内存使用上限。 为照顾小白用户我打个比方:你开法拉利(超大内存),我开QQ(1G内存),咱俩一起在路上跑(使用内存),但是限速50(内存使用限制),只要超过限速就扣车(超过限制即强行释放内存),你开再好的车也不可能比我快多少,因为苹果不让,除非苹果放开限速让你随便跑(开放内存配额上限)。但是不把路挖掉重新铺的话(系统限制,除非大刀阔斧的做改造,否则开放意义也不大,主要是苹果公司认为没意义……),就不能开放限速,所以现阶段只能限速50.这就是IPHONE只用1G内存的原因。

再补充一点个人见解,是回复中有人提醒我所想到的:伪后台也会造成系统长时间运行,增加其耗电量。苹果如果使用了大内存,并放开了伪后台使用限制的话,很可能随着使用时间的积累造成大量伪后台长期运行,最终导致耗电量直线增加,我想这也是苹果最终采取了这种一刀切做法的原因。我想大家宁愿看到程序闪退,也不愿意用待机5个小时揣兜里烫屁股的手机吧……这句话纯属个人吐槽,因为此问题是可以利用技术手段修正的,不过遇上流氓软件的话,后果你们懂。

在此更新一下后台进入所引发的程序重载问题。看懂上面红字解释的朋友继续看这里:由于有50M内存使用限制,所以很多大型软件几乎都是使用多次载入多线程的方法来达到增大可用内存的目的。这样做的话,因为首次载入的话是按照顺序载入的,一次一个线程,所以可以正常使用。但是如果此程序退出到后台的话,有可能在回到主程序的过程中发生所有内容一次性加载这种情况,也就是在“最大化”的过程中一次性加载进了所有的内存,造成系统判断此程序超过了内存允许使用的上线,于是强制释放内存造成闪退。

最后着重阐述一下不增大内存的实际原因:苹果公司不想加大内存,现阶段内存大小足够你日常使用不出大问题。其实很容易理解,苹果是个商业公司,不是慈善机构,只要它能保证做出的产品可以正常使用,那它的本职工作就已经完成了,大家不用纠结他到底用的什么配置,因为他不管用什么配置,2年以内苹果都会为你的手机保持更新,以保证你在能满足正常使用的条件下可以用到最新的程序功能,这就足够了。

更新:关于IPAD AIR2使用2G内存的事,本人是这么理解的:IPAD AIR2的IOS8和其他设备更新的IOS8略有不同,只有IPAD AIR2的IOS8有同屏多任务功能,也就是说,一个屏幕中可以同时运行两个或以上的程序,相当于开放了1个全功能后台,内存使用量翻倍,1G内存根本不可能胜任,所以必须升级的2G。如果是这样的话,正好印证了我文中所说的“苹果只要不出真正的后台运行,它就基本上不会把内存提升到1G以上”这个观点,只不过把真后台改成了“多任务并行”这种方式。当然,如果有不同意见的话,欢迎回帖留言,我一个人的力量毕竟是有限的

【转载】不再纠结:从程序员的角度解读苹果为什么坚持使用1G内存相关推荐

  1. OSChina 周四乱弹 ——程序员的角度解读地震

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2017)请戳(这里) [今日歌曲] @OSC_JajGgv :分享轨风的单曲<拂晓车站>: &l ...

  2. 从程序员的角度深入理解MySQL

    前言 作为一名工作了4年的程序猿,今天我将站在程序员的角度以MySQL为例探索数据库的奥秘! 数据库基本原理 第一,数据库的组成:存储 + 实例 不必多说,数据当然需要存储:存储了还不够,显然需要提供 ...

  3. 从一个程序员的角度看——微信小应用

    前言: 最近初步了解了一下微信小应用,APP端的同事也非常感兴趣,于是在公司内部做了一个小小的分享,分享的过程中有很多讨论内容,大家也是非常感兴趣和有自己的看法,当时"混乱"的场面 ...

  4. 从Java程序员的角度理解加密的那些事

    前言 在我们日常的程序开发中,或多或少会遇到一些加密/解密的场景,比如在一些接口调用的过程中,我们(Client)不仅仅需要传递给接口服务(Server)必要的业务参数,还得提供Signature(数 ...

  5. 构造函数为什么不能是虚函数 ( 转载自C/C++程序员之家)

    从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的.问题出来了,如果构造函数是虚的,就需要通过 vtable来调用, ...

  6. 从程序员的角度分析微信小程序(编程语言:用到什么学什么)

    从程序员的角度分析微信小程序(编程语言:用到什么学什么) 一.总结 一句话总结:微信小程序原理就是用JS调用底层native组件,和React Native非常类似.(需要时,用到时再学) 1.选择语 ...

  7. python是通用编程语言吗-2020年,编程语言将不再只属于程序员,尤其是这门语言...

    原标题:2020年,编程语言将不再只属于程序员,尤其是这门语言 "学python,那不就是去做程序员吗?" 一提到python,许多同学第一反应会觉得,这是要去做程序员才需要学的技 ...

  8. 从程序员的角度分析微信小程序

     从程序员的角度分析微信小程序             我赶快在书架上拿出三年前买的书,把上面的土擦干净,压压惊. 作为一个并不是资深的程序员. 从程序员的角度分析一下微信小程序,欢迎指点. 首先 ...

  9. 我改变世界、我已看透、我不再是个程序员-IT创世诸神如是说

    如果按照1969 美国国防部主导建立的ARPANET算做互联网的原年,那么今年恰好是第50个年头,可以说互联网的江湖与其说是名利场,不如说是武侠世界.代码是没有二义性的,话说的再怎么动听,到了show ...

最新文章

  1. flux服务器推消息,在Spring WebFlux响应式处理程序中发送JMS消息:它是否阻塞?
  2. 决策树学习算法 - ID3算法
  3. python表白程序-我喜欢你 抖音表白程序python版
  4. 21、Java Swing JOptionPane:对话框组件
  5. oracle 父子排序,父子项排序 求大神们出手
  6. php显示网卡信息,netwox显示网络配置信息
  7. Linux上线程开发API概要(线程)
  8. 分治法在二叉树遍历中的应用(JAVA)--二叉查找树高度、前序遍历、中序遍历、后序遍
  9. 组合数学 —— 卡特兰数列(Catalan)
  10. 【Siddhi】Siddhi实时计算核心流程分析
  11. linux下find命令-atime,-ctime,-mtime真正含义
  12. 前端 java_WEB前端与JAVA的区别
  13. deep|Bayes(4)
  14. Win10 数字认证
  15. 爬取汽车之家所有汽车参数配置
  16. pe不认服务器硬盘,WINPE认不出硬盘或移动硬盘怎么办?
  17. Apple Store教育优惠(161103)
  18. 七月阅读:《刘慈欣科幻短篇小说集Ⅰ》笔记
  19. DXF解析成运动控制程序
  20. 9、一篇文章带你看懂5G网络(接入网+承载网+核心网)

热门文章

  1. 《黑马》——C++提高编程
  2. Linux下图像处理软件汇总
  3. PHP仿百度网盘文件分享dzzoffice网盘系统源码
  4. 滴滴出行数据应用平台建设实践
  5. Hibernate学习(一)
  6. 聚划算的赢面不只是刘涛
  7. 手把手教最新最全最详细Git使用教程(图文并茂,附Git命令大全学习文档)
  8. 办公软件excel表格_推荐这个免费的Excel共享编辑办公软件,操作很灵活、功能很全...
  9. UVA1203 Argus
  10. win10+VS2017编译配置boost_1_78_0