Lua的垃圾收集器会自动停止收集。

我注意到在游戏运行一段时间后,内存消耗开始增加。我成功地缩小了问题范围——每帧执行一次会导致内存问题:

    lua_newtable(L);
    lua_pop(L,1);

我添加了一个调试日志来检查Lua正在使用多少内存:

    printf(“使用的内存:%d\n”,lua_gc(L,LUA_GCCOUNT,0));

这揭示了内存使用情况在大约30秒内保持良好,随着垃圾收集器执行其工作而上上下下。然后内存停止下降。显然,垃圾回收器停止工作。

我测试了在每一帧重置垃圾收集器(更少的话可能已足够),可以解决问题。

    lua_gc(L,LUA_GCRESTART,0);

为什么Lua这样对我?我找不到其他人有同样的问题。

我在Windows上使用Lua 5.1.5。

点赞