为什么样 iPhone 5s 什么样程序也不开的情况下内存占用高达 600 多 M?iPhone上APP内存cpu监控有什么样好办法

发表时间:2017-12-11 13:48:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《如何看待红米note3用联发科高端芯片Helio X10卖799?都有哪些型号的手机或手机cpu容易发生wifi断流》相关知识。本篇中小编将再为您讲解标题为什么样 iPhone 5s 什么样程序也不开的情况下内存占用高达 600 多 M?iPhone上APP内存cpu监控有什么样好办法。

为什么苹果⑤s内存在什么程序也不开的情况下使用率仍然那么高达到⑥⓪⓪多M,而且开再多程序不觉得卡。(附加问题:Windows的内存管理特色与之相反么?手机和桌面不同环境的内存管理策略差异大不大?)

某高票答案关于unix系内存管理的说法纯属胡说⑧道。

unix系用top之类命令看内存占用时,会发现它比windows之类系统内存占用更高;但这并不是什么“惰性释放内存”。真正的原因是:它会尽量把空闲内存拿来做缓存,以尽量减少外设访问,提高性能表现。

如果你是linux/windows的老用户,且经常切换使用linux/windows,就会发现,内存足够且无磁盘相关操作时,windows系统的硬盘灯仍然不停闪烁,而linux却可以几分钟甚至几⑩分钟都不闪①下。这就是cache算法的威力。

PS:大概win⑦之后,windows也有了类似机制,于是情况大有改善,硬盘灯也能做到⑩几秒才闪①次。

PS②:linux的确是不把buffers/cache空间报告为free内存空间的,见下面的链接;但buffers/cache中的①部分可视为free空间(即:如果程序申请更多内存,buffers/cache占用的部分内存可释放、然后分配给需要内存得程序使用)——之前我曾经很疑惑,为何linux内存管理明显比windows xp好得多得多,但未启动任何服务/进程的系统怎么比windows的内存占用量多那么多?后来才知道是把cache也算做已用内存了。至于IOS有没有这么老实,我就不知道了。

Linux Check Memory Usage

所谓“惰性释放内存”的说法,大概是把java虚拟机之类东西和传统操作系统的相关概念搞混了——之后的唧唧歪歪无非是文过饰非乃至强辞夺理罢了;然而行内哪个词能用在什么地方是有共识的。

java有垃圾收集机制,内存不用时不用程序显式删除,忘记即可;垃圾收集系统会自动定期清理;这个清理时机常常是“内存不够用时”,所以的确可以叫“惰性释放”——内存其实早该释放了,但既然还有空闲内存可用,那么不释放也没什么害处;不如攒①块儿,等不清理不行时①下子清理干净算了。

但ios、linux/unix、windows压根就没提供“垃圾收集”机制,也没有其它类似机制,自然也压根谈不上惰性不惰性了。

事实上,恰恰相反,unix系经典的“偷页”算法,反而是在内存未被占满之前,就把某些可能不再使用的内存页提前放到交换区(即所谓的“虚拟内存”):这反而是在“积极释放(物理)内存”了——不过,准确点说,这是“把暂时用不到的数据先存到磁盘空间”,从而使得“可用的物理内存”变多,并非“释放内存”。

此外,①旦占用内存的程序过多,就可能需要频繁在内存和磁盘之间来回倒腾数据,此时系统就会陷入“颠簸”状态。①旦进入这种状态,机器就会变得非常非常慢,程序也非常容易崩溃——毕竟磁盘访问速度比内存访问速度要低上好几个数量级。

————————————————————————

IOS/android等新兴操作系统的确设计有①个特殊机制。这个机制允许程序切到后台时保存其运行现场信息;之后,如果长时间不使用该程序、或者内存紧张时,系统就可以把这样的后台程序关闭,以便腾出更多内存空间。

当用户再次激活此程序时,如果程序还在内存中,自然切回前台就可以立即执行;但如果程序已经被清出内存,那就需要重新加载、并读取之前保存的运行现场信息,使程序恢复到之前状态继续运行——看起来就好像程序从未被关闭过①样。

这个机制显然并不适用于“(操作系统)什么都不开时就占用大量内存”的讨论;它也不叫什么“惰性释放内存”,而是①个大得多的题目:“程序状态持久化”。

只有状态可持久化的程序才可以在暂时不用时,随时由操作系统主动关闭,否则……等着用户骂娘吧。

这种“事先做好准备、以便在内存不足时可安全的主动杀死后台进程获取内存”的行为,显然是非常非常“激进”的,因为它并不是“延缓本该释放的内存释放”,而是“主动干掉不重要的进程,抢夺可用内存”——谁敢叫它“惰性“释放内存?

————————————————————————

至于特定操作系统占用的内存都做什么用了……那可就太复杂了。

首先,系统提供的每个功能都需要①定的内存支持,功能多,内存占用就多。换句话说,某些需求是硬性的,除非精简功能,否则……

其次,就好像 @pansz 的答案中提到的,商家并没有优化内存占用的动机。毕竟程序员比内存可贵得多了——哪怕①个程序会影响数亿部手机。

①个现成的例子就是java的垃圾回收机制:使用垃圾回收机制的程序,往往需要比手工管理内存的程序多好多倍的内存才能流畅运行(比如同样的小游戏,如果c/c++需要①⓪⓪M内存才能流畅运行的话,java很可能就得⑤⓪⓪M以上的内存才能有类似表现);但大家仍然宁可选择java,因为内存实在太便宜了……

第③,因为现在有虚拟内存技术,可随时把内存中暂时用不到的东西移到磁盘等大容量慢速存储器上,缓解物理内存不足问题;这也导致商家没有太大的动力去把内存占用优化到极致:反正虚存管理算法会自动解决问题。

更激进的,就是前面提到的“先让程序支持运行状态持久化、然后在必要时主动杀死进程释放资源”这个做法,可用来缓解“系统中跑了太多进程,导致资源不足”问题。

既然这类问题可被各种技术自动缓解……那我们干嘛还要付出大量时间、精力、金钱,冒着捅出大漏子的风险去优化它?

最后,可能是类似linux cache内存的“虚假占用”:看似内存占用很大,实则随时可腾出来挪作他用:这些“无理占用”的内存反而提高了系统的整体表现。

综上,①句话:多占点内存并不会立即导致明显的严重后果;而且除非对内存的需求已经达到某个极限(比如导致“颠簸”),否则总有各种机制能够自动缓解危机……而且,即便遇到了最坏情况,那么最经济的解决方案往往也是“换手机/升级硬件”而不是“做好优化”。

你选 左边的 track inspection head 可以查看期间任意时间点的具体占用信息 默认选了 display lastest 才导致你看不到\", \"extras\": \"\", \"created_time\": ①③⑨⑤⑦①③⑦⑥② · \"type\": \"answer

编后语:关于《为什么样 iPhone 5s 什么样程序也不开的情况下内存占用高达 600 多 M?iPhone上APP内存cpu监控有什么样好办法》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《苹果手机谁机型最好?玻璃背板加升级cpu和无线充电》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题