如何检测对象是否被垃圾收集器删除

How I can detect if an object is removed by the Garbage Collector?

本文关键字:收集器 删除 是否 对象 何检测 检测      更新时间:2023-09-26

我需要一种方法来检测对象何时被Javascript上的GC处理,特别是V8引擎(我需要在google chrome和node上实现工作)

除非通过某种调试钩子,否则不能从程序内部进行修改。

EcmaScript委员会明确拒绝了一个提案,部分原因是它间接暴露了这样的事情:

请注意,makeWeakRef对于一般访问是不安全的,因为它授予了观察垃圾收集所固有的不确定性访问。由此产生的侧信道揭示了可能违反其他程序保密假设的信息。

换句话说,能够判断一个对象何时被垃圾收集可以允许JavaScript收集违反同源策略的其他代码的信息。


从V8的嵌入API中,你可以通过makeWeak回调获得关于某些对象的通知:

当只有弱句柄引用对象时,垃圾收集器将对给定的V8::WeakReferenceCallback函数执行回调,将对象引用和给定的参数传递给它。