Я написал NIF, используя ресурс с работающей сборкой мусора. Хотя GC запускается очень поздно, что иногда приводит к тому, что машине не хватает памяти, когда она может освободить ресурсы, на которые нет ссылок.
Каждый ресурс выделяет около 1 ГБ памяти сторонней C ++ lib. Моя теория состоит в том, что BEAM не понимает, сколько памяти выделено, что делает сбор мусора ресурсом с опозданием. Если это правда, как я могу помочь ЛУЧУ понять это?
Есть ли способ проверить счетчик ссылок, чтобы я мог убедиться в отсутствии неожиданных ссылок на него кодом Эрланга?
В качестве обходного пути я вызываю специальную функцию выпуска NIF из кода Erlang, которая освобождает большую часть выделенной памяти, когда, надеюсь, ни один другой процесс еще не использует ее.