Автор Тема: Течет память  (Прочитано 8648 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Течет память
« Ответ #15 : Апрель 28, 2013, 06:27:38 pm »
Гы гы  :D

Воткнул в цикле collectgarbage():
for ID, Body, Packed in Image.Rows() do
        if Packed then
            res = lmz.inflate(Body)
            if res then
                if res:sub(1, 4) == SIG then
                    UnpackTo(ID .. '/', cf.NewStringReader(res), zip)
                else
                    assert(zip:write(path .. ID, res, level.BEST_SPEED))
                end
            else
                print('inflate error', ID)
            end
        else
            assert(zip:write(path .. ID, Body, level.BEST_SPEED))
        end
    collectgarbage() -- СОБИРАЕМ МУСОР НАСИЛЬНО
    end
НЕ ТЕЧЕТ!

Походу LuaJIT так ентот цикл заворачивает, что gc совсем не вызывается

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Течет память
« Ответ #16 : Апрель 28, 2013, 06:56:13 pm »
Забавно. Вместо простого collectgarbage() делаю так:
if collectgarbage('count') > 50 * 1024 then
            print('collect!')
            collectgarbage()
        end
В результате в консоли ничего не печатает, но и память не течет. Комментирую строчку collectgarbage() и в консоль вываливает кучу 'collect!', память соответственно опять течет.