文档章节

如何有效降低内存峰值防止过高及其原理分析

我是不是呱呱
 我是不是呱呱
发布于 2015/09/08 20:18
字数 614
阅读 283
收藏 4

答案就是:

在函数创建对象之前先创建一个自动释放池,因为这个释放池是函数里面的局部变量,所以当函数结束的时候,会调用他的析构函数,而普通的情况是在一帧结束的时候才会调用自动释放池(不是这个,普通的)的析构函数。基于这个背景来分析一下为什么。

1.内存峰值过高是为什么?

  在cocos2d中因为我们在一帧内创建的临时对象太多了,这些对象是占用内存的罪魁祸首,而这些对象正常情况下就算是用不到的对象也是是要在一帧结束的时候才会释放,所以就导致了内存峰值过高。

2.解决思路

  所以我们要解决一个问题,即:让用不到对象不要在一帧结束的时候才释放,而是让其提前释放,比如说超过其作用域的时候马上释放或者用不到的时候马上释放,这样就不会占用内存了。我这里采用的方法就是前者:用不到的变量在超过其作用域的时候就是房。

3.怎么释放,以及为什么这样有效果?

  释放的方法很简单,即:在函数里面创建对象之前先创建一个自动释放池。函数第一句创建了一个自动释放池,在创建的时候,这个自动释放池会被追加到了释放池栈_releasePoolStack。又因为在创建其他普通对象的时候会又一个autorelease()函数,这个函数会将新创建的对象添加到我们刚才创建的自动释放池(最新的)里面去。

当作用域结束后会调用对象的析构函数,而新加的自动释放池的作用域也是结束了,所以会调用这个自动释放池的析构函数。

自动释放池的~autoreleasePool函数(析构函数),会将这个自动释放池里面的所有对象都release一遍,所以那些用不到的变量就会自动释放掉了,

这样就实现了自动释放对象的功能。


© 著作权归作者所有

我是不是呱呱
粉丝 1
博文 4
码字总数 4511
作品 0
门头沟
程序员
私信 提问
2016-2017中小企业运维建议

2016-2017中小企业运维建议 1.重要的服务器系统环境建议配置数据备份设备或采用合适的容灾解决方案,以保证系统或运营设备出现严重故障时的业务的快速恢复,以及核心数据的安全。核心数据库至...

2222011775
2018/08/02
0
0
某大厂,iOS高级开发精选面试题!

前言 为防止背题,大部分题目不设标准答案,重点考察面试者的基础知识和思维逻辑,答案的提示见后面。 正文 题目1、举例两个遇到过印象深刻的外网Crash,并介绍如何发现、定位、解决; 题目2...

_小迷糊
02/14
0
0
CUDA实践指南(十)

存储器优化: 内存优化是性能最重要的领域。 目标是通过最大化带宽来最大限度地利用硬件。 使用尽可能多的快速内存和尽可能少的慢速访问内存可以更好地提供带宽。 本章讨论主机和设备上的各种...

night李
2018/02/28
0
0
新鲜出炉的腾讯音乐iOS面试题

前言 为防止背题,大部分题目不设标准答案,重点考察面试者的基础知识和思维逻辑,答案的提示见后面。 正文 题目1、举例两个遇到过印象深刻的外网Crash,并介绍如何发现、定位、解决; 题目2...

落影loyinglin
2018/07/16
0
0
HTTP stream PUT and GET analysis

前言 目前正在从事云端存储和备份方面的工作,主要负责测试框架的开发和优化。软件技术人员对"stream"(流)这个词应该并不陌生,很多场景下,"stream"更是代表着性能上的优化。在web服务的开...

等风起
2015/04/04
176
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部