有没有办法让Lua更频繁地收集垃圾?
似乎Lua几乎不会释放我的应用程序中的垃圾,因此内存增加得非常高(超过500MB)。内存迅速增加,尤其是当我在一个大循环中声明许多变量时。
我知道我可以手动调用collectgarbage()
,但是人们说我几乎永远不要调用此函数。
因此,我想知道是否有任何选项可以使垃圾收集器自动更频繁地运行。
添加:如果没有办法,我想知道是否有可能在Lua中获得内存使用率,所以我可以在需要时调用collectgarbage()
。
答案 0 :(得分:2)
您可以使用collectgarbage
调整GC。通过将“ setpause”或“ setstepmul”作为第一个参数,您可以调整参数。
“ setpause”控制开始新的循环之前必须分配多少内存。值100表示它将运行每个分配,值200表示将等待直到内存加倍。
“ setstepmul”控制着它尝试收集垃圾的“速度”。
如果将“ count”传递给collectgarbage
,它将返回以千字节为单位的内存。
在C api方面,您使用int lua_gc(lua_State *L, int what, int data)
并传递LUA_GCSETPAUSE
,LUA_GCSETSTEPMUL
作为调优的内容,并将LUA_GCCOUNT
传递为what
将返回使用的内存。