Quantcast
Channel: Cocos中文社区 - 最新主题
Viewing all articles
Browse latest Browse all 88737

关于lua与js性能、js内存泄漏、垃圾回收造成卡顿的测试

$
0
0

@1111922 写道:

写在前面:公司使用cocos2d-js 3.9开发游戏,一款横版过关arpg游戏,目前已经在app store上线(感兴趣可以app store搜艾泽拉斯战记)。发现游戏出现有规律卡顿,并确认原因出在GC上面,没有找到合适的方法解决,比较烦恼。遂做一些测试,对于lua与js的性能比较好奇,也想与大家交流一下,如果有测试不合理的地方还望提出。

环境:

mac mini + OS X Yosemite(10.10.5)+xcode(Version 7.2.1)
cocos2d-x 13.1.1 + Simulator Iphone6(IOS 9.2)

测试代码(代码均在cocos2d_tests中稍加修改得来)

js:

var scene = new cc.Scene();
var array = {};
var count = 0;
scene.update = function () {
  for (var i = 1; i < 100000; i++) {
    array[i+count*100000] = {value:[count]};
  }
  count++;
  if (count > 51) {
    for (var i = 1; i < 100000; i++) {
      array[i+(count-50)*100000] = null;
    }
  }
  cc.log("count="+count);
}
scene.scheduleUpdate();
cc.director.runScene(scene);

lua:

local sceneGame = cc.Scene:create()
local array = {}
local count = 0;
sceneGame.update = function ()
  for i=1, 100000 do
    array[i+count*100000] = {["value"]={count}}
  end
  count = count+1
  if count > 51 then
    for i=1, 100000 do
      array[i+(count-50)*100000] = nil;
    end
  end
cclog("count=" .. count);
end
sceneGame:scheduleUpdateWithPriorityLua(sceneGame.update,0)
cc.Director:getInstance():runWithScene(sceneGame)

分别运行一分钟。

帧数对比:

js 9fps
lua 2.5fps.
在这里 js的性能明显比lua要快。但是 如果不是这种赋值方式,而是简单的创建对象,lua比js要快,另外lua的加法和乘法也比js要快上许多。

卡顿现象:

js在循环稳定后,会出现周期卡顿,应该是由GC引起。
lua在循环稳定后,没有出现周期卡顿,但是本身lua帧数较低,这里也没有弄明白是lua的垃圾回收性能较好,还是本身比较卡所以也看不出来。

内存占用:

js在循环稳定后,在xcode中使用内存截图如下:

在时间增加的过程中,内存占用持续增高,会出现周期性回落,但是整体上是升高的。

lua:

内存占用会稳定在1GB。但是会越来越卡。

有一点我一直不是很明白,就是xcode里面的memory里面显示的究竟是什么内存。因为我跑js的测试代码时,最后内存会到3.xGB。望知道的告诉我一下,谢谢。

Instruments:

js:

lua:

同样对于显示结果的解释不是很清楚的了解,直观上看js有内存泄漏。

以上是测试的现象,但是有些现象不能很好的解读,希望论坛内的大神能帮忙解读一下。
另外js游戏GC造成卡顿的现象,对于一个商业游戏应该是不能接受的。网上查到的方法有做对象池的,做缓存的(?),我自己想到的还有切换场景的时候手动调用gc函数进行gc。但是,在我们游戏的战斗过程中依然会产生让人不爽的卡顿(即使使用iphone7p)。这个问题只能是在代码编写中少新建对象,尽量重用已有对象来解决吗?感觉对编程的要求有些高,有时很难注意。
另外以上的结果是否证明使用lua还是比使用js要稳定一些?还是希望与大家进行讨论: )。

帖子: 1

参与者: 1

阅读整个主题


Viewing all articles
Browse latest Browse all 88737

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>