有效降低内存峰值防止过高及其原理分析
来源:互联网 发布:xcode使用教程c语言 编辑:程序博客网 时间:2024/05/17 22:37
1.内存峰值过高是为什么?
在cocos2d中因为我们在一帧内创建的临时对象太多了,这些对象是占用内存的罪魁祸首,而这些对象正常情况下就算是用不到的对象也是是要在一帧结束的时候才会释放,所以就导致了内存峰值过高。
2.解决思路
所以我们要解决一个问题,即:让用不到对象不要在一帧结束的时候才释放,而是让其提前释放,比如说超过其作用域的时候马上释放或者用不到的时候马上释放,这样就不会占用内存了。我这里采用的方法就是前者:用不到的变量在超过其作用域的时候就释放。
3.怎么释放,以及为什么这样有效果?
释放的方法很简单,即:在函数里面创建对象之前先创建一个自动释放池。函数第一句创建了一个自动释放池,在创建的时候,这个自动释放池会被追加到了释放池栈_releasePoolStack。又因为在创建其他普通对象的时候会又一个autorelease()函数,这个函数会将新创建的对象添加到我们刚才创建的自动释放池(最新的)里面去。
当作用域结束后会调用对象的析构函数,而新加的自动释放池的作用域也是结束了,所以会调用这个自动释放池的析构函数。
自动释放池的~autoreleasePool函数(析构函数),会将这个自动释放池里面的所有对象都release一遍,所以那些用不到的变量就会自动释放掉了,
这样就实现了自动释放对象的功能。
综上所述,答案就是:
在函数创建对象之前先创建一个自动释放池,因为这个释放池是函数里面的局部变量,所以当函数结束的时候,会调用他的析构函数,而普通的情况是在一帧结束的时候才会调用自动释放池(不是这个,普通的)的析构函数。基于这个背景来分析一下为什么。
0 0
- 有效降低内存峰值防止过高及其原理分析
- OC阅读笔记十七: "autorelease pool"降低内存峰值
- cpu利用率过高,内存溢出分析
- 记java项目cpu 内存过高分析
- hp-fpm占用内存过高分析
- 怎么有效的防止内存泄漏
- 写高质量OC代码52建议总结:34.以“自动释放池块”降低内存峰值
- 内存未对齐导致性能降低及其处理
- [代码性能] -- 内存峰值
- Raspberry Pi-2 内存占用过高现象分析
- C/C++怎么有效的防止内存泄漏
- 数据峰值带宽-有效带宽-传输速率
- MYSQL 防止cup过高优化
- TreadLocal原理及其使用分析
- ScrollTextView及其内存泄漏分析
- jvm定位内存过高
- svhost占用内存过高
- 内存未对齐(Unaligned access ...)导致性能降低及其处理
- KVO实现机制
- CSS Sprite使用整理
- 彻底解决ReSharper自动删除换行的问题
- Tab在不同页面的隐藏与不隐藏问题。
- UVA 12716 GCD XOR (数论 gcd和异或不等式)
- 有效降低内存峰值防止过高及其原理分析
- Android中滑屏实现----手把手教你如何实现触摸滑屏以及Scroller类详解
- JAVA 猜拳游戏三局两胜版
- JAVA 第二个程序
- 为什么Intent传递值会失败?
- 2.24
- LEETCODE-Power of Two
- 中国剩余定理
- lintcode-子集17