LeviLamina icon indicating copy to clipboard operation
LeviLamina copied to clipboard

Script-object Finalizer function registry

Open yqs112358 opened this issue 1 year ago • 0 comments

如题,由于脚本引擎GC的不确定性以及尚未存在C++中的析构函数之类的稳定机制,无法准确地界定脚本对象的生命周期何时结束,或者在其被销毁时得到通知以进行某些操作 因此需要引入某种析构通知机制或者Finalizer注册机制

@callstackexceed 大佬提出了这方面的问题。由于ES2021 引入了 FinalizationRegistry,并且 V8 实现了该 API, 此请求的优先级降低,但是因为跨语言的原因仍然希望实现该 API

建议原话:

new _Finalizer(finalize: () => void);

当这个类被垃圾回收后调用finalize()

这个类有义务持有 finalize ,防止它提前被垃圾回收。

注意 : 这个API应当谨慎使用,只有有特殊要求的开发者才需要调用。 _Finalizer 不同于 Java 中的 finalize , 不是在 _Finalizer 实例被回收之前,而是在之后调用此API,因此,不可能像 Java 中那样"复活"一个对象。 为保证安全, finalize 不应无论直接还是间接持有 _Finalizer 实例的(强)引用,无论是作为 Object 还是通过作用域,如果不能保证这一点,请不要使用这一 API 。

yqs112358 avatar Jul 20 '22 02:07 yqs112358