Как заставить сборщик мусора Lua работать чаще? - PullRequest
0 голосов
/ 07 ноября 2018

Есть ли способ заставить Луа собирать мусор чаще?

Похоже, что Lua практически не освобождает мусор в моем приложении, поэтому объем памяти действительно увеличивается (более 500 МБ). Память быстро увеличивается, особенно когда я объявляю много переменных внутри большого цикла.

Я знаю, что могу вручную вызвать collectgarbage(), но люди говорят, что я почти никогда не должен вызывать эту функцию.

Поэтому мне интересно, есть ли возможность заставить сборщик мусора автоматически запускаться чаще.

ДОБАВЛЕНО: если нет способа сделать это, я хотел бы знать, возможно ли получить использование памяти в Lua, чтобы я мог вызвать collectgarbage() при необходимости.

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете использовать collectgarbage для настройки ГХ. передача "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 вернет используемую память.

...