使用chrome测试cocos creator内存泄漏问题

优化cocos creator的步骤:

1.首先使用webgl inspector插件查看游戏中是否存在不用的没有释放的资源

2.使用chrome的performance录制游戏过程,分析cpu的消耗及js的堆中内存情况,是不是js堆一直在变大,是否有内存泄漏

3.根据第二步,找到内存变大的部位,使用chrome的Memory进行内存快照,对比两次快照中对象的差异.

js具有自动垃圾回收功能,目前浏览器都是采用标记清除算法实现js的垃圾回收功能,标记清除算法的大概思路是将无法访问到的对象进行回收,使用js编写逻辑代码,在闭包中容出现内存泄漏问题.如下代码所示:

var gTestArray : Array<any> = [];

        setInterval(()=>{

            this.tickUpdate();

        },100);

 

function tickUpdate(){

tickUpdate1();

//tickUpdate2();

//tickUpdate3();

}

    function tickUpdate1(){

        let tmpArray = [];

        for(let i = 0 ; i < 10000; i++){

            tmpArray.push(new Object);

        }

        let tmpFunc = function(){

            console.log("AAAAA : ",tmpArray);

        }

        gTestArray.push(tmpFunc);

    }

 

    function tickUpdate2(){

        let tmpArray = [];

        for(let i = 0 ; i < 10000; i++){

            tmpArray.push(new Object);

        }

        let tmpFunc = function(){

            console.log("AAAAA  ");

        }

        gTestArray.push(tmpFunc);

    }

 

function tickUpdate2(){

        let tmpFunc = function(){

            console.log("AAAAA  ");

        }

        gTestArray.push(tmpFunc);

    }

 

在tickUpdate中分别调用tickUpdate1,tickUpdate2,tickUpdate3,使用chrome进行heap内在快照分析分别如下图所示:

 

使用tickUpdate1时,内存一直在上涨,是因为在闭包中引用了创建的数组,导致数组没法回收.

使用tickUpdate2时,内存上涨然后下降,上涨是因为一直在创建数组,下降是因为定时进行了垃圾回收,把没有用到的对象进行了回收.

使用tickUpdate3时,内存基本上保持不变,闭包中没有用到上层函数中的局部对象.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值