ios内存详解
IOS以及Mac os都是基于Unix/linux改造出来的,而在内存管理方面也沿用了Unix/Linux的内存管理机制。
下面主要说的是IOS系统,有很多比较喜欢捣鼓的吧友肯定自己清理过机器的内存,而装过内存清理软件比如内存优化大师、weestats插件什么的,一定会发现内存分成了四部分:可用空间、联动、活跃、非活跃。而多数人尤其是touch和ip4之前的小内存机型的吧友经常会惊呼,哇!可用空间这么小了啊!小内存机器就是不耐艹啊!
众所周知,CPU的处理速度和数据IO的速度是有数量级级别的差距的,而高速存储器的造价非常高,所以折中的做法是分级管理,CPU,二级缓存,内存,外存。速度依次递减。而在速度最慢的外存中,数据通常是以顺序存储的方式存储的,好处是方便顺序读取。好了,说到这里我要普及一个概念叫做局部性原理,就是在访问数据时,访问到这一个存储块的数据也很有可能访问到相邻下一个数据块的数据,因此在程序像CPU发出数据请求然后CPU发出指令把数据从外存调入内存时,Unix/Linux系统下的做法是把相邻若干个存储块的数据一起调入内存,这样就减少了将数据从外存调入内存的操作,可以大大提高IO速度。(UC浏览器用过吧,缓存下一页熟悉不?)
返回来再看我们的内存管理软件。可用空间,识字的都能看得懂,不说了。联动,是操作系统内核程序和数据,以及打开的程序,这个是肯定不能动的,不多说。活跃,就是最近做过访问以及读或者写操作的,换句话说就是程序现在正在用的。非活跃,重点来了,这就是根据局部性原理从外存中提前预读进来的数据,几乎所有的内存清理软件,都是在这上面做文章。前面说了,这部分数据提前预读进来是为了提高IO速度的,而多数内存清理软件为了造成可用空间变大,会释放这部分数据变成可用空间,看起来好像清爽很多,可是实际是这样么?再次引用局部性原理,这部分数据很有可能是程序接下来会用到的,你现在把他们释放了,过一会还需要从外存中调入进来,而这个过程是需要时间的。因此这样清理内存的做法,不但不会提高系统的速度,反而会拖慢速度。
怎么样看内存才是科学的呢?联动和活跃自然是不能动的,正确的做法是看非活跃数据是否很多,如果很多,不需要看可用了,你的内存还够用。如果你非活跃数据很少,那么看看可用空间,如果很多,好吧,这是你们看起来最顺眼的状态。而如果可用空间也很少,清理几个吃内存的deb插件吧,多数是美化的。各位,不要再小白了,非活跃内存不是垃圾!!!
其实我本人是很吐槽说内存不足以及有些人没事就清理内存这种做法的。为什么呢?简单地说,因为你手上的设备跑的不是windows系统,不需要沿用windows的使用习惯。windows系统和unix/linux系统是完全不同的,windows为了兼容古老和不规范的程序,允许程序直接控制硬件,而许多windows程序也不规范,因此在退出进程后往往许多内存没有还给系统,而又没有自己释放掉,因此变成了invisible memory,导致时间一长系统可用内存越来越少,此时便需要重启系统或者清理内存。
为了解释ios的后台机制,我需要再引用一个概念,就是进程挂起。挂起进程在操作系统中可以定义为暂时被淘汰出内存的进程,机器的资源是有限的,在资源不足的情况下,操作系统对在内存中的程序进行合理的安排,其中有的进程被暂时调离出内存,当条件允许的时候,会**作系统再次调回内存。而IOS下所有的后台程序都是挂起的,占用CPU么?不。占用内存么?也不。不同于windows,开一个窗口占一份内存,开的越多系统越卡。
ios内存详解的更多相关文章
- Java中堆内存和栈内存详解2
Java中堆内存和栈内存详解 Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,ja ...
- 【转】IOS AutoLayout详解(三)用代码实现(附Demo下载)
转载自:blog.csdn.net/hello_hwc IOS SDK详解 前言: 在开发的过程中,有时候创建View没办法通过Storyboard来进行,又需要AutoLayout,这时候用代码创建 ...
- Linux内存详解
--Linux内存详解 -----------------2014/05/24 Linux的内存上表现的不像windows那么直观,本文准备详细的介绍一下Linux的内存. 请看这下有linux命令f ...
- JVM内存详解-阅读笔记
- Oracle内存详解之 Library cache 库缓冲
Oracle内存详解之 Library cache 库缓冲 2017年11月09日 11:38:39 阅读数:410更多 个人分类: 体系结构 Library cache是Shared pool的一部 ...
- DDR3内存详解,存储器结构+时序+初始化过程
DDR3内存详解,存储器结构+时序+初始化过程 标签: DDR3存储器博客 2017-06-17 16:10 1943人阅读 评论(1) 收藏 举报 分类: 硬件开发基础(2) 转自:http:/ ...
- NAND_FLASH_内存详解与读写寻址方式
一.内存详解 NAND闪存阵列分为一系列128kB的区块(block),这些区块是 NAND器件中最小的可擦除实体.擦除一个区块就是把所有的位(bit)设置为"1"(而所有字节(b ...
- IOS SDK详解
来源:http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html?page=1#42803301 博客专栏>移动开发专栏>I ...
- iOS路由详解
本文如题,路由详解,注定是一篇详细解释iOS路由原理及使用的文章,由于此时正在外地出差,无法详细一一写出,只能不定时的补充. 一.什么是iOS路由 路由一词来源于路由器,可以实现层级之间消息转发的功能 ...
随机推荐
- 记一次MySQl 安装1067错误
1.今天阿里云windows server 2008 r2服务器上安装mysql,配置完发现无法启动mysql服务(并发设置的是500),查询windows日志提示 Unknown/unsupport ...
- jQuery--jqChart折线图使用eval处理返回数据无效的解决方法
jquery初学者 查了很多帖子,jqchart插件做折线图时,处理返回数据时全都是eval,但我怎么也弄不出来,后来发现: 1.根本不需要eval处理,直接截取字符串即可(返回值要拼接好): 2.处 ...
- 【转载】Express、Koa、Hapi框架对比
中文翻译:http://ourjs.com/detail/5490db1c8a34fa320400000e 英文原文:https://www.airpair.com/node.js/posts/nod ...
- 关于多本小说站的SEO—从”易读中文网”获得的心得体会
从目前国内的网站流量来说,电影站,小说站,游戏站等的流量占总流量的比例还是很高的,许多站长把目光投入到了这几个方面,本文就着重来说对于小说站,尤其是多本小说站的SEO心得体会! 对于小说站来说,只要排 ...
- Hive笔记--配置以及遇到的问题
ubuntu安装mysql http://www.2cto.com/database/201401/273423.html Hive安装: http://www.aboutyun.com/forum ...
- DotNET知识点总结五(笔记整合)
1.委托:通常指的是 多播委托 通常的说,委托就是一个存放方法指针的容器,是一个安全的函数指针,供程序员安全调用.委托的本质就是一个类,继承于MulticastDelegate——>Delega ...
- TOP 100 MISSPELT/MISSPELLED WORDS IN ENGLISH
acceptable accidentally accommodate acquire acquit a lot amateur apparent argument atheist believe ...
- Android UI主线程与子线程
一个Android 程序默认情况只有一个进程,但是一个进程可以有多个线程.其中有一个UI 线程也称为UI主线程,UI Thread在Android程序运行的时候就被创建,主要是负责控制UI界面的显示. ...
- Android 之Service
service是运行在后台的服务,你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作. 接下来分析一下service 的生命周期: 1: ...
- uva 10020 Minimal coverage
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...