MvG*_*MvG 11 javascript memory-management finalizer asm.js
假设我有一些asm.js代码,可能是由emscripten创建的.假设它有一些相当大的堆分配结构,它由asm.js函数返回,作为一个指针,由一些JavaScript库拾取,包装在一个漂亮的JavaScript对象中.好到目前为止.
但是,如果该对象超出范围并被垃圾收集,会发生什么.现在,asm.js代码无法知道这一点,因此结构的内存将保持分配状态,从而导致内存泄漏.
有没有办法从JavaScript中向JavaScript对象添加终结器?
这样的终结器可用于释放asm.js中的内存,从而避免内存泄漏.到目前为止,我找不到一个记录在案的便携式方法来实现这一点,但也许我一直在寻找错误的地方.
回到这个问题,我发现另一个答案指出存在一些浏览器实现的弱引用和终结的规范。最终确定的核心组件是FinalizationRegistry。
因此,根据您的目标浏览器,这现在可能是可能的。如果您需要支持没有此功能的浏览器,使用显式释放调用,则可以使用支持的终结器来检测内存泄漏(即 JavaScript 代码中未显式释放的对象)并让开发人员知道,以便他们可以修复此问题。