A
Jetpack ベースのライブラリでクラスを書いているとします (つまり、chrome/extension コードについて話している) :
function A() {
//constructor
}
A.prototype = {
//class members
};
ユーザーはクラスのインスタンスを作成しますA
:
var a = new A();
A
作成されたすべてのインスタンスを追跡したい場合は、次のようにします。
var listA = [];
listA.push(this);
のコンストラクターを追加し、次のA
ようにします。
var listA = [];
function A() {
// constructor
listA.push(this);
}
A.prototype = {
// class members
};
のユーザーがa
その参照を削除するまで (たとえばa
、範囲外になるまで)、すべて問題ありません。私は今問題を抱えています:listA
への参照がまだ含まれているa
ため、ガベージコレクションされることはありません。さらに、他の方法では到達できないlistA
インスタンスを除外する方法がありません。A
私は効果的にメモリをリークしています。
listA
必要なのは、通常の参照ではなく弱い参照にプッシュすることです。どうにかできると思いますが、ここからどこへ行けばいいのかよくわかりません。私は次のようなものを想像できます:
var weak_a = new weakRef(a);
assert(weak_a.ref === a);
しかし、たとえば、弱い参照がまだ有効かどうかをテストする方法がわかりません。または、 で死んだ弱いエントリを効率的に除外する方法listA
。助言がありますか?