Closed yqs112358 closed 2 months ago
如题,由于脚本引擎GC的不确定性以及尚未存在C++中的析构函数之类的稳定机制,无法准确地界定脚本对象的生命周期何时结束,或者在其被销毁时得到通知以进行某些操作 因此需要引入某种析构通知机制或者Finalizer注册机制
@callstackexceed 大佬提出了这方面的问题。由于ES2021 引入了 FinalizationRegistry,并且 V8 实现了该 API, 此请求的优先级降低,但是因为跨语言的原因仍然希望实现该 API
FinalizationRegistry
建议原话:
new _Finalizer(finalize: () => void);
当这个类被垃圾回收后调用finalize()。
finalize()
这个类有义务持有 finalize ,防止它提前被垃圾回收。
finalize
注意 : 这个API应当谨慎使用,只有有特殊要求的开发者才需要调用。 _Finalizer 不同于 Java 中的 finalize , 不是在 _Finalizer 实例被回收之前,而是在之后调用此API,因此,不可能像 Java 中那样"复活"一个对象。 为保证安全, finalize 不应无论直接还是间接持有 _Finalizer 实例的(强)引用,无论是作为 Object 还是通过作用域,如果不能保证这一点,请不要使用这一 API 。
_Finalizer
Java
Object
如题,由于脚本引擎GC的不确定性以及尚未存在C++中的析构函数之类的稳定机制,无法准确地界定脚本对象的生命周期何时结束,或者在其被销毁时得到通知以进行某些操作 因此需要引入某种析构通知机制或者Finalizer注册机制
@callstackexceed 大佬提出了这方面的问题。由于ES2021 引入了
FinalizationRegistry
,并且 V8 实现了该 API, 此请求的优先级降低,但是因为跨语言的原因仍然希望实现该 API建议原话:
当这个类被垃圾回收后调用
finalize()
。这个类有义务持有
finalize
,防止它提前被垃圾回收。