v1.1.1 node移除后内存没有释放?(发布mac平台)

项目中反复创建移除过组件,发现内存一直在增长不知道是什么情况

下面是创建和移除节点的代码
(PrefabCache.getPrefabByName)是获取已加载的组件
(onChange) 是点击按钮的回调事件

__removeAllChilden: function () {
        var count = this._nodes.length;
        for (var i = count - 1; i >= 0; i--) {
            var item = this._nodes[i];
            item.destroy();
            this._nodes.pop();
        }
        cc.log('remove finish nodes length: ' + this._nodes.length);
    },

__addChilden: function () {
    for (var i = 0; i < 150; i++) {
        var item = this.__createItem();
        this.node.addChild(item);
        this._nodes.push(item);
    }
    cc.log('add finish nodes length: ' + this._nodes.length);
},

__createItem: function () {
    var prefab = PrefabCache.getPrefabByName('finderButton');
    var item = cc.instantiate(prefab);
    return item;
},

 onChange: function () {
           this.__removeAllChilden();
          this.__addChilden();
}

发布到mac平台
测试截图
刚进入91mb

点击change按钮11次后变成119.4mb


测试工程:testProject.zip (556.1 KB)

你好,原生平台的内存回收不会非常积极,麻烦操作再持续长一些时间看看,一般会在很久很久以后才会有一个很大的内存回落。如果内存最终没有回落,麻烦把范例发上来看看!

jare大人,还是不行……,我等了大概5分钟,并没有回落,帮忙看下我的例子工程吧,谢谢

好的------------------------

1赞

新版原生平台有点问题,多谢反馈

恩恩,请问这个问题会在下个版本修复吗?

会的 --------------

1赞

我们查到了 EventListener 导致内存没有能够释放,目前已经修复 EventListener 那边的问题,不过会观察到内存回收依然没有那么及时和干净,这个有两方面原因:

  1. JavaScript 引擎内部垃圾回收机制对内存有复用
  2. Creator 引擎中存在其他的内存泄漏,这个我们会继续跟进,如果发现其他能稳定重现内存泄漏的方法,请告诉我们
1赞