如何使Lua垃圾收集器更频繁地运行?

时间:2018-11-07 13:38:19

标签: lua garbage-collection

有没有办法让Lua更频繁地收集垃圾?

似乎Lua几乎不会释放我的应用程序中的垃圾,因此内存增加得非常高(超过500MB)。内存迅速增加,尤其是当我在一个大循环中声明许多变量时。

我知道我可以手动调用collectgarbage(),但是人们说我几乎永远不要调用此函数。

因此,我想知道是否有任何选项可以使垃圾收集器自动更频繁地运行。

添加:如果没有办法,我想知道是否有可能在Lua中获得内存使用率,所以我可以在需要时调用collectgarbage()

1 个答案:

答案 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_GCSETPAUSELUA_GCSETSTEPMUL作为调优的内容,并将LUA_GCCOUNT传递为what将返回使用的内存。