2

ECMAScript 6 では弱いマップが導入されています。これは Node.JS v0.11.3 でフラグ付きで実装されています--harmony

次のコードを考えてみましょう。

var weakMap = WeakMap();
var temp = {};
weakMap.set(temp, 'Save me!');
temp = {};

最後の行が実行されると、文字列'Save me!'はガベージ コレクションの準備が整います。文字列に、現在のスコープから文字列につながる強い参照のチェーンがなくなったことをコードで実証できますか?

size弱いマップには反復やマップに似たプロパティがないことを知っています。特定のオブジェクトが弱いマップからアクセスできなくなったことを事後的に知る方法がないということですか?

4

1 に答える 1

1

そうするのは意味がないので、できません。到達できない場合に到達可能かどうかを尋ねる良い方法はありません。機能があれば

isStronglyReachable(foo)

では、どのように unreachable に渡しますfooか? への弱い参照を渡す方法はありません。直接foo渡すとfoo、強い参照を使用したため、強く到達可能であることがわかります (そして、パラメーターにバインドすると、別の強い参照が作成されます)。あなたはフォームの何かを試すことができます

weakmap.isValueStronglyReachable(key)

ただし、キーへの強力な参照が必要になります。これにより、値が強力に到達可能になります。フォームの何かを試したとしても

weakmap.getArrayOfUnreachableKeys()

(これにより、返されたオブジェクトが返された配列を介して到達可能になります)、ランタイムは完全な GC パスを実行して、到達できない値を特定する必要があります。また、GC パスを実行している場合は、なぜエントリを削除しないのでしょうか?到達不能キー?

于 2013-07-09T01:21:27.920 に答える