假设我有一些 asm.js 代码,可能是由 emscripten 创建的。假设它有某种相当大的堆分配结构,它由 asm.js 函数作为指针返回,该指针由某些 JavaScript 库拾取以包装在一个漂亮的 JavaScript 对象中。到目前为止还不错。
但是如果该对象超出范围并被垃圾收集,会发生什么情况。现在,asm.js 代码无法知道这一点,因此结构的内存将保持分配状态,从而导致内存泄漏。
有没有办法从 JavaScript 中向 JavaScript 对象添加终结器?
这样的终结器可用于释放 asm.js 中的内存,从而避免内存泄漏。到目前为止,我找不到一种记录在案的可移植方式来实现这一点,但也许我一直在寻找错误的地方。
最佳答案
简单的回答是不支持这个。
由于 asm.js 代码需要管理自己的内存,因此与存储在 asm 端的对象交互的所有内容都需要遵守 asm 使用的内存管理器,而不是浏览器使用的内存管理器。您可以做的最好的事情是在您创建或销毁对它的引用时显式调用任何引用内部 asm 内存的对象的方法。
关于javascript - JavaScript 对象的终结器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20266610/