Cocoa框架中的内存分区
NSObject对象类实例为我们提供了两种分配内存的方式:alloc和allocWithZone:。alloc的实现也是为了调用allocWitZone:,它传入了一个默认的zone。所以明确的说,NSObject提供了一种分配内存的方式。什么是zone?为什么要使用zone?
Zone代表了内存中的一段连续的内存区域。当我们需要创建一些具有相同访问模式以及生命周期的对象时,我们可以采用Zone让这些对象在计算机的地址空间中保持相邻的位置,这样可以提高应用程序的性能。要搞清楚对象在内存中的位置如何影响性能,我们需要知道虚拟内存以及当应用程序请求了比实际物理内存大的内存时,系统会发生什么事情?
这些知识已经在之前的博客中有过提及,这里仅仅是简单的表述。注意:下面的表述适用于OS X系统,IOS由于处理方式不一样,但是原理大致一样,就不在此提及。
当应用程序请求了一块内存,但是系统发现物理内存已经使用完毕,没有内存可供使用时,会触发一个页面调度程序将那些暂时不用的对象objectA的数据从内存中置换到backing store中,然后将这部分内存分配给内存请求方objectB。当objectB使用完毕后,假如objectA马上又请求内存,虚拟内存管理系统发现之前有数据置换到backing store,会尝试将这些数据置换回内存,同时也可能将objectB的数据置换到backing store,当然也与可能置换其它的对象的数据,具体置换那些根据内存使用情况而定。如果应用程序在频繁的调用objectA和objectB,那么操作系统就会频繁的使用页面置换,这十分影响性能。另外如果两个对象对应的虚拟内存位置不连续,那么这两个对象触发页面置换的可能性会非常大,因为系统一般会将一段连续的内存加载进来。
分区确保了分配给要同时使用的对象位于相邻的位置。当使用某个对象时,另外的对象基本也会用到,因为这些对象位于同一个分区,那么所有对象同时调入内存的可能性就更大。
Cocoa提供了一些管理内存区域的函数。例如:NSDefaultMallZone(),NSCreateZone()以及NSRecycleZone()。当然,这些东西使用的比较少,我们可能只需要了解就可以了,在将来有用处时可以考虑是否使用。
Cocoa框架中的内存分区的更多相关文章
- NSPredicate用法总结(Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取)
简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 定义(最常用到的方法): NSPredicate *ca = [NSPred ...
- JVM中的内存分区简介
1.JVM的内存区域划分: 大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) ...
- Objective-C中的内存管理——手动内存管理
一.引用计数(retainCount) 1.内存的申请 alloc和new是Objective-C语言中申请内存的两种常用方式. 当我们向一个类对象发送一个alloc消息的时候,其会向操作系统在堆中申 ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等 (转载)
http://blog.csdn.net/totogo2010/article/details/8081253 Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助. ...
- .NET 4.0中使用内存映射文件实现进程通讯
操作系统很早就开始使用内存映射文件(Memory Mapped File)来作为进程间的共享存储区,这是一种非常高效的进程通讯手段.Win32 API中也包含有创建内存映射文件的函数,然而,这些函数都 ...
- Objective-C入门 简介Cocoa框架
Cocoa Framework简称Cocoa,它是Mac OS X上的快速应用程序开发(RAD, Rapid Application Development)框架,一个高度面向对象的(Object O ...
- cocoa框架 for iOS
1.Cocoa是什么? Cocoa是OS X和 iOS操作系统的程序的运行环境. 是什么因素使一个程序成为Cocoa程序呢?不是编程语言,因为在Cocoa开发中你可以使用各种语言:也不是开发工具,你可 ...
- iOS程序中的内存分配 栈区堆区全局区
在计算机系统中,运行的应用程序的数据都是保存在内存中的,不同类型的数据,保存的内存区域不同.一.内存分区 栈区(stack) 由编译器自动分配并释放,存放函数的参数值,局部变量等.栈是系统数据结构,对 ...
随机推荐
- AJAX顺序输出
转载:http://www.cnblogs.com/niunan/archive/2010/10/13/1849873.html AJAX顺序输出 在安装大多数CMS的时候都会在安装界面上看到这样的 ...
- C# 常用日期类型转换帮助类
本文转载:http://www.cnblogs.com/iamlilinfeng/p/3378659.html 最近工作比较忙,与此同时自己也在业余时间开发一个电子商务网站.虽然每天都很累,但感觉过的 ...
- 数据字符集mysql主从数据库,分库分表等笔记
文章结束给大家来个程序员笑话:[M] 1.mysql的目录:在rpm或者yum安装时:/var/lib/mysql 在编译安装时默许目录:/usr/local/mysql 2.用rpm包安装的MyS ...
- Posting data to a HttpHandler greater then ~29MB gives a 404 error
1down votefavorite 1 I am testing a HttpHandler that accepts XML. It works fine when a small amount ...
- php 算法之切割数组,不用array_chunk(),算法之二,取数组的差值,不用array_diff()
用php写算法切割数组,不用array_chunk();算法例如以下所看到的. <?php //$array 数组 //$size 每一个数组的个数 //每一个数组元素是否默认键值 functi ...
- [AngualrJS] ng-strict-di
In Angular 1.5 introduces "compoment" syntax. But ng-annotate doesn't understand ".co ...
- HBuilder:最快的Web开发IDE
这里给大家介绍一个个人觉得最好用的web开发工具:Hbuilder. HBuilder是DCloud推出的一款支持HTML5的Web开发IDE.快,是HBuilder的最大优势,通过完整的语法提示和代 ...
- Type mytableview does not confirm to portocol UITableViewDataResource
继承UITableViewDataSource报上面这个总是,是重写协议时写错了 override func numberOfRowsInSection(section: Int) -> Int ...
- 关于Service常驻内存不被清理的解决方法.
众所周知, Service是跑后台的. 但是有些Rom厂商把一键清理做的真是太好用了, 以至于一键清理变成了一种习惯, Service已经变的不再是Service了. 那为什么像诸如360, 微信, ...
- Linux下*.tar.bz2等文件如何解压--转
如果tar不支持j这个参数就先用 bzip2 -d xxx.tar.bz2 把它解压成.tar文件,然后再用 tar xvf xxx.tar 拆包.压缩解压 linux下怎么解后缀名是gzip的文件? ...