美文网首页
iOS内存管理和内存优化

iOS内存管理和内存优化

作者: Mannyao | 来源:发表于2020-10-13 18:24 被阅读0次

    https://xiaozhuanlan.com/topic/6973420158
    [https://developer.apple.com/documentation/xcode/improving_your_app_s_performance/reducing_your_app_s_memory_use]

    内存

    虚拟内存

    虚拟内存技术可以使一个应用程序认为自己有一段连续的内存空间(多个大小相同的内存页page组成的逻辑地址空间),使得程序编程和运行起来容易;同事隐藏了真实的物理内存地址,起到一定的保护作用;还能隔离不同的进程,更安全
    当前虚拟内存和物理内存的分页都是16kb

    iOS虚拟内存

    内存空间结构
    image.png
    因为iPhone中的磁盘用的是闪存(容量和读写寿命都有限制),所以iOS中没有memory swap机制,memery swap也就是当内存空间不足时将部分内存数据存储到磁盘中,等到下次使用时再从磁盘中,等到下次使用时,再从磁盘读取数据到内存中。
    取而代之的是,iOS采用的是内存警告memory warning,当系统检测到内存空间不足时,会给每个进程APP发送memory warning。
    Clean momery 和Dirty memory
    Memory Page 分为 Clean Memory 和 Dirty Memory,前者通常来说是指能够进行memory swap的memory page,而后者不能够进行内存置换操作,但是iOS因为没有memory swap,所以Clean Memory不是通常的意思,在iOS中是指能够重复被使用的内存页,相对的,Dirty Memory 是不能够重复使用的内存页
    Clean Memory 主要包括以下几部分:
    1. app的二进制可执行文件
    2. framework中的_DATA_CONST 段
    3. 文件映射的内存
    4. 未写入数据的内存
      下面就“未写入数据的内存”举个例子:
    int *array = malloc(20000 * sizeof(int));
    array[0] = 32
    array[19999] = 64
    

    那内存页分类如下:


    image.png

    红色的页是 Dirty Memory,蓝色的页是Clean Memory
    MRC就是手动加retain release autorelease,ARC就是编辑器帮你加retain release autorelease,下面测试下MRC:

    相关文章

      网友评论

          本文标题:iOS内存管理和内存优化

          本文链接:https://www.haomeiwen.com/subject/mdizjktx.html