我已经使用带有工作垃圾收集资源的NIF进行了编写。虽然,GC触发得很晚,这有时会使机器有时会耗尽内存,而此时它应该能够释放不再引用的资源。
每个资源都由第三方C ++ lib分配大约1 GiB的内存。我的理论是,BEAM不了解分配了多少内存,这使得资源被垃圾回收的时间较晚。如果是这样,我如何帮助BEAM理解这一点?
有没有一种方法可以检查引用计数器,从而可以验证Erlang代码没有意外引用?
作为一种解决方法,我从Erlang代码中调用了一个自定义释放NIF函数,当希望没有其他进程仍在使用它时,它将释放大部分已分配的内存。