Supporting circular references that can be garbage collected.
還沒有人認領這個 Issue。
評估
研究方向
從 issue 中所示的 Napi::ObjectWrap 和 Napi::Reference 用法開始,然後調查 Node-API 如何處理相互參照物件的原生參照和垃圾回收。完成的標準是確定是否支援可回收的循環參照,並記錄或提出所需的 API 層級方案;該 issue 未指定原始檔案或測試。
由索引模型根據 Issue 內容生成。
描述
In JavaScript I can make two objects that reference each other and they'll still be GCed.
function makeObjectsThatReferenceEachOtherButLeakNoReferences() {
const a = new Uint8Array(1024);
const b = new Uint8Array(1024);
a.other = b; // make them reference each other
b.other = a;
}
makeObjectsThatReferenceEachOtherButLeakNoReferences();
In the code above, even though a circular reference was created, JavaScript will see there is no path from root and garbage collect the objects.
Is it possible to do the same in C++ Napi. If I make a class
class MyClass : public Napi::ObjectWrap<MyClass> {
...
Napi::Reference<Napi::Object> storedObjectRef_;
};
And I manage to make 2 instanced of MyClass and set storedObjectRef_ so they point to each other, AFAICT these objects will never be garbage collected.
Is there a solution?
Note: I know I could add some function close or whatever to null out storedObjectRef_ but that's not really the question I'm asking. I'm trying to reproduce JS garbage collecting circular references.
One idea I guess, which appears to work, is I could add a JS property to MyClass. So instead of Napi::Reference<Napi::Object> storageObjectRef_ I'd use Get, Set as in
this->Value().Set("storageObjectRef", otherObject);
but unfortunately that's visible externally which I don't want. I could use a symbol but those are inspectable too. Though it might be better than nothing if there is no other solutions.
- 主要語言
- C++
- 星號
- 2.4k
- 分支
- 499
- 平均合併
- 2 天 11 小時
- 30 天內合併 PR
- 2
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
nodejs/node-addon-api 的其他 Issue
-
blocked SemVer-major
難度 4/5 3-5 天 新手友好度 52/100
nodejs/node-addon-api#1748 ·
-
SemVer-major
難度 4/5 3-5 天 新手友好度 55/100
nodejs/node-addon-api#1747 · 2 則留言 ·
-
blocked SemVer-major
難度 4/5 3-5 天 新手友好度 52/100
nodejs/node-addon-api#1746 ·
-
SemVer-major
難度 4/5 3-5 天 新手友好度 55/100
nodejs/node-addon-api#1745 ·
-
stale
難度 4/5 3-5 天 新手友好度 48/100
nodejs/node-addon-api#1724 · 2 則留言 ·
查看 nodejs/node-addon-api 的全部 Issue
相似的 Issue
-
難度 1/5 1-3 小時 新手友好度 92/100
autowarefoundation/autoware_universe#13413 ·
-
難度 2/5 1-3 小時 新手友好度 88/100
-
automated-analysis bug memory-safety
難度 2/5 1-3 小時 新手友好度 68/100
-
難度 2/5 1-3 小時 新手友好度 86/100
-
Sensor initialization takes very long when `--initial-sim-time` is set to current UNIX timestamp 未關閉
難度 2/5 1-3 小時 新手友好度 78/100
gazebosim/gz-sensors#662 · 1 則留言 ·