Mac OS X / IOS 内存管理简要说明
最近身边用苹果的人越来越多,这是一件好事,我很高兴身边的朋友们都能用上世界上最先进的计算机和操作系统,但是大部分朋友都是从Windows过度过来的,从系统使用和原理理解上都有一些Windows的观念,最近很多朋友问我一个问题:“为什么我的系统一开机还没运行什么程序,空余内存就没多少了,我可是4GB内存啊,是不是有什么问题?”针对这一问题,特写此文,让大家理解基于UNIX的Mac OS X是如何管理内存的。
之前转载了一篇文章介绍Unix/Linux的内存管理,但是很多朋友说看不懂,那今天我就通俗的跟大家分享一下,Mac是如何管理内存的。
首先,我们要来了解一下,Mac OS X的内存四种状态,打开你的“应用程序-实用工具-系统监视器”程序,切换到“系统内存”标签,你会看到你的内存有联动、活跃、非活跃和可用空间四种状态:
见下图:
联动是系统核心占用的,永远不会从系统物理[内存]种清除,
活跃表示这些[内存]数据正在使用种,或者刚被使用过,
非活跃表示这些[内存]中的数据是有效的,但是最近没有被使用,
可用空间表示这些[内存]中的数据是无效的,这些空间可以随时被程序使用。
当可用空间的[内存]低于某个值(这个值是由你的物理[内存]大小决定的),系统则会按照以下顺序使用非活跃的资源。首先如果非活跃的数据最近被调用了,系统会把它们的状态改变成活跃,并接在原有活跃[内存]逻辑地址的后面, 如果非活跃的[内存]数据最近没有被使用过,但是曾经被更改过而还没有在硬盘的相应虚拟[内存]中做修改,系统会对相应硬盘的虚拟[内存]做修改,并把这部分物理[内存]释放为可用空间供程序使用。如果非活跃[内存]中得数据被在映射到硬盘后再没有被更改过,则直接释放成可用空间。最后如果活跃的[内存]一段时间没有被使用,会被暂时改变状态为非活跃。
所以说,如果你的系统里有少量的可用空间内存和大量的非活跃的内存,说明你的[内存]是够用的,系统运行在最佳状态,只要需要,系统就会使用它们,不用担心。而反之如果系统的可用空间内存和非活跃内存都很少,而活跃内存很多,说明你的[内存]不够了。当然一开机,大部分[内存]都是可用空间,这时系统反而不在最佳状态,因为很多数据都需要从硬盘调用,速度反而慢了。
其实这就是Unix的内存管理方式,我们大家都知道,内存的速度是比硬盘快得多的,那么UNIX的内存管理机制就是尽可能多的使用你的物理内存,当你没有打开程序的时候,系统自动会把一些系统常用的资源从硬盘加载到内存,当你开始执行操作需要调用这些资源的时候,系统就不会从硬盘去读取你的资料了,而是直接从内存读取(专业术语叫命中),这样就提高你的系统速度,不浪费你的物理内存资源。
Mac系统基于UNIX系统,继承了UNIX这一内存管理机制并且进行一定的优化,Mac的内存管理具有UNIX的特征的同时,Mac还会记录你最常用的程序,然后在你内存有足够空余资源的时候,就把这些程序主要模块(Modlue)加载到内存,当你开启这个应用的时候,程序就快速启动了,当你关掉这个程序界面(Command+W / iOS-Home)的时候,大部分程序并不会真正的退出(quit)系统,而是保留程序核心模块驻留系统内存,你可以在Dock上看到图标下有个小亮点(iOS连按Home),当你下一次需要使用的时候,只要点一下程序就快速启动了,如果你很久没有再用这个程序而打开了其他程序,而打开了其他很多程序,那么系统就会在内存不够用得时候,自动把你只是关闭没有退出(Command+W)的程序驻留内存文件转移到硬盘的某个地方(pagefiles)中,等待你的调用,只有当你完全退出程序(Command+Q)的时候,这些程序就从内存清除了,但是Mac系统会智能的学习和了解你的你操作习惯,不断的更换你的常用程序列表,然后当物理内存有空的时候随时把你常用的程序模块载入内存,等待你调用。其实这也是Mac系统为什么点按窗户红色按钮是关闭而不是退出的设计思维原理,就是让程序在下一次被用户打开时能够快速启动,而且先进的Unix内存管理计算方式几乎不用你去担心是否内存不够用了,需要退出这些打开的程序,因为系统会习惯出一个最佳值什么时候释放内存(哪些内存数据什么时候保存到pagefiles去)来保证你的系统运行效率,尤其是现在很多iOS设备用户,每次都喜欢按Home返回后再连按Home去退出程序,其实完全没必要这么做,因为iOS是Mac OS的移动版,具有和Mac OS X完全相同并且高效的内存管理机制,你每次运行了程序再去退出他,反而降低了你系统下一次开启这个程序的速度。
windows为了兼容古老和不规范的程序,允许程序直接控制硬件,导致windows系统的权力不够大,而许多windows程序也不规范,因此在退出进程后往往许多[内存]没有还给系统变成了invisible memory,导致时间一长系统可用[内存]越来越少。因此常常需要重新启动。而且Windows在内存管理方面也于Unix有很大的区别,由于我对Windows并不是很熟悉,所以只能以我自己的理解来向大家说明,如有错误,还请斧正。由于Windows的系统模块链接关系不明确,权限又很混乱(Windows貌似压根就没有文件权限这个说法),导致后来Windows98就经常蓝屏死机,又为了防止大量不规范程序退出后不归还系统内存,所以Windows就只能在系统启动完毕,加载完必要模块后,当用户请求一个程序就从硬盘调用一个,不用就清除的办法来管理内存,所以如此就造成了系统物理内存的大量浪费,因为我们并不是随时都需要运行超级大的程序,事实上,大部分人的电脑都有4GB内存,而通常只开一个QQ和一个浏览器,顶多在打开一个Music Player,所占内存不到200MB,加上系统内存最对也就1GB左右,至少一台4GB内存的计算运行Windows的话,有75%的时间内存使用不到2GB,那么也就是说用户花了4GB的钱,其实浪费掉了75%,比如花了400元,你就浪费了300元,但是用UNIX就不会浪费你的钱,因为Unix先进的系统架构和内存管理就决定了这个因素。
其实Unix的内存管理先进性仅仅只是Unix一个小小的细节,Unix还有很多很多比Windows先进的地方值得我们学习,以后我会为大家介绍更多的Unix/Linux特性。