内存管理简介

1.内存管理的重要性

  • 移动设备的内存极其有限,每个app所能占用的内存是有限制的
  • 下列行为都会增加一个app的内存占用
    • 创建一个OC对象
    • 定义一个变量
    • 调用一个函数或者方法
  • 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回收一些不需要使用的对象、变量等
  • 如果app占用内存过大, 系统可能会强制关闭app, 造成闪退现象, 影响用户体验

2.什么是内存管理

  • 如何回收那些不需要再使用的对象?

    • 那就得学会OC的内存管理
  • 所谓内存管理, 就是对内存进行管理, 涉及的操作有:
    • 分配内存 : 比如创建一个对象, 会增加内存占用
    • 清除内存 : 比如销毁一个对象, 能减小内存占用
  • 内存管理的管理范围
    • 任何继承了NSObject的对象
    • 对其他非对象类型无效(int、char、float、double、struct、enum等 )
  • 只有OC对象才需要进行内存管理的本质原因
    • OC对象存放于堆里面
    • 非OC对象一般放在栈里面(栈内存会被系统自动回收)

3.堆和栈

  • 栈(操作系统):由操作系统自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈(先进后出);
  • 堆(操作系统):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。
  • 示例:
int main(int argc, const char * argv[])
{
    @autoreleasepool {
        int a = 10; // 栈
        int b = 20; // 栈
        // p : 栈
        // Person对象(计数器==1) : 堆
        Person *p = [[Person alloc] init];
    }
    // 经过上一行代码后, 栈里面的变量a\b\c都会被回收
    // 但是堆里面的Person对象还会留在内存中,因为它是计数器依然是1
    return 0;
}

时间: 2024-08-14 11:23:50

内存管理简介的相关文章

内存管理(简介,引用计数器)

移动设备的内存及其有限,每个app所占的内存是有限制的 下列行为都会增加一个app的内存占用 1,创建一个OC对象 2,定义一个变量 3,调用一个函数或者方法 当app所占用的内存比较多时,系统会发出内存警告,这时得回收一些不需要再使用的空间.比如回收一些不需要使用的对象,变量等. 如果app占用内存过大: 系统可能会强制关闭app,造成闪退现象,影响用户体验. 所谓内存管理,就是对内存进行管理,涉及的操作有: 分配内存:比如创建一个对象,会增加内存占用 清楚内存:比如销毁一个对象,能减小内存占

Windows内存管理简介:

1:连续的内存空间分配: (1)单一连续分配:只能单作业,单任务运行: 分为系统和用户区:用户区是指除了系统需外左右的内存,由于单用户,单任务,要不都被占用,要不全空   (2):固定空间分配:固定分区分配是最简单的一种多道程序存储管理方式,它将用户内存空间划分为若干个固定大小的区域,每个分区只装入一道作业.当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区,如此循环. 分区大小相等:用于利用一台计算机去控制多个相同对象的场合,缺乏灵活性. 分区大小不等:划分为含有多个

JVM笔记2-Java虚拟机内存管理简介

java虚拟机内存管理图如下图所示: 1.线程共享区,是所有的线程所共用的,线程共享区有一下几个组成: 1.方法区:运行时常量池,已经被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据 2.java堆:存储对象实例 2.线程独占区,是每一个线程都有自己独立的虚拟机栈,本地方法栈,程序计数器. 1.虚拟机栈:存储方法运行时所需的数据,成为栈帧. 2.本地方法栈:为JVM所调用到的native即本地方法服务. 3.程序计数器:记录当前线程所执行到的字节码的行号. 原文地址:https

1.6 内存管理

一. 内存管理简介 1. 为什么要有内存管理? 移动设备内存极其有限,而每个app所能占用的内存是有限制的. 以下行为都会占用内存 .创建一个OC对象 .定义一个变量 .调用一个函数或者方法 当app所占用的内存较多时,系统会发出内存警告,这时就需要回收一些不再使用的内存 如果app占用的内存过大,系统可能会强制关闭app,造成闪退现象,影响用户体验 2. 什么是内存管理 1> 所谓内存管理,就是对内存进行管理,涉及的操作有: .分配内存:比如创建一个对象,会增加内存占用 .清理内存:比如销毁一

属性与内存管理(属性与内存管理都是相互关联的)

<span style="font-size:18px;"> 属性与内存管理(属性与内存管理都是相互关联的)第一部分 一,属性: 属性是OC2.0之后出来的新语法,用来代替setter和getter方法,使用属性可以快速创建setter以及getter方法的声明,setter和getter方法的实现,另外添加了对实例变量操作的安全处理(其安全是通过内存管理实现的) setter 方法作用:为单一的实例变量重新赋值, 规范: (- 号方法)无返回值, 名字以set开头后面加上

Java内存管理(一)

好久没有写博客了,深感惭愧,今天聊一下Java的内存管理 简介 Java相比传统语言(C,C++)的一个优势在于其能够自动管理内存,从而将开发者管理内存任务剥离开来. 本文大体描述了J2SE 5.0 release中JVM对于内存是如何管理的.并且为选择和配置对应的收集器,配置收集器的参数提供了一些建议和参考. 手动VS自动内存管理 内存管理是能够识别哪些释放的对象不再使用,释放掉这些对象所占用空间的一个过程.在很多编程语言中,内存管理是开发者的责任.但是管理内存的任务具有一定的复杂性,会导致很

C#下内存管理--垃圾收集

章节安排 内存管理简介 垃圾回收机制 性能问题 C#下非托管资源的处理 要强调的几点 References 内存管理简介 对于任何一种编程语言,内存管理都是不得不提很重要的一块内容,但可惜的是目前为止没有任何一种编程语言对内存管理处理的非常完美,每种语言都在兼顾性能 效率,语法语义易用性等方面折中中有所侧重.例如较之于C#,JAVA等语言C++号称不需要垃圾收集,因为C++本身产生的垃圾很少,诚然这是C++的 优势,这也就是为什么在内存受限或者效率优先的环境下优先考虑C++,但它的缺点也是明显的

JMM内存管理

原文地址http://www.cnblogs.com/BangQ/p/4045954.html 原本准备把内存模型单独放到某一篇文章的某个章节里面讲解,后来查阅了国外很多文档才发现其实JVM内存模型的内容还蛮多的,所以直接作为一个章节的基础知识来讲解,可能该章节概念的东西比较多.一个开发Java的开发者,一旦了解了JVM内存模型就能够更加深入地了解该语言的语言特性,可能这个章节更多的是概念,没有太多代码实例,所以希望读者谅解,有什么笔误来Email告知:[email protected],本文尽

Linux堆内存管理深入分析

(上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种.国内关于栈溢出的资料相对较多,这里就不累述了,但是关于堆溢出的漏洞利用资料就很少了.鄙人以为主要是堆溢出漏洞的门槛较高,需要先吃透相应操作系统的堆内存管理机制,而这部分内容一直是一个难点.因此本系列文章主要从Linux系统堆内存管理机制出发,逐步介绍诸如基本堆溢出漏洞.基于unlink的堆溢出漏洞利用.double fr