問題タブ [weakmap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 「循環」参照はWeakMapの「到達可能性」として扱われますか?
指定されたコードについて、唯一のweakMap
項目が到達可能と見なされるかどうか? したがって、ガベージコレクションされるかどうか。
PS: この質問は、特定の実装ではなく、仕様の観点から尋ねられます。
javascript - ECMA6 での WeakMap の動作が理解できない
ECMA6 で WeakMap を使用しているときに、奇妙なシナリオに直面しています。私は次のようなクラスを書いています
このクラスを呼び出してオブジェクトをインスタンス化する
アウトプットはこちら
WeakMap のこの動作について明確にすることはできません。
javascript - WeakMap (a, b) が必要 -> c
メモ化された fn があります。ここで、fn は 2 つの入力参照によってメモ化されています。
私が必要とする行動はNewRefCursor(a, b) === NewRefCursor(a, b)
. a
またはb
がガベージ コレクションされると、カーソルもガベージ コレクションされる必要があります。
refToHash
ES6WeakMap
を使用するもう 1 つのメモ化された関数で、参照が引き続き GC に許可されるようにします。
NewRefCursor
キャッシュ ヒットを決定するために 2 つのパラメーターを使用するため、メモ化するのが非常に難しく、 と互換性がなくWeakMap
、参照が GC されるのを防ぐことができます。私は、入力オブジェクトにプライベート フィールドを追加したり、確率的なデータ構造を作成したりするなど、あらゆる種類の策略を受け入れます。このリークは解決する必要があります。私がこれまでに持っている唯一の解決策は、キャッシュ サイズを制限するパラメーターを memoize に追加し、そのパラメーターをアプリごとに調整することです。全体。
javascript - es6 の Map および WeakMap コレクションのガベージ コレクション
WeakMap の説明を読んでいたところ、次のように書かれていました。
ネイティブの WeakMap では、主要なオブジェクトへの参照は「弱く」保持されます。つまり、オブジェクトへの参照が他にない場合でも、ガベージ コレクションは妨げられません。
これを読んで、JavaScript のガベージ コレクションを利用しようとしている場合に WeakMap が使用されていることがわかりました。私が根本的に理解していないのは、私が太字にした行です。
通常の Map では、それらへの参照を持たないオブジェクトがガベージ コレクションされないのはなぜですか? これにはどのような利点がありますか?通常のマップから明示的に削除する必要がありますか?
javascript - EcmaScript から WeakMap を使用する場合のタイミングの問題に関する考慮事項
JavaScript での WeakMap の適切な使用法は何ですか? 使用時にどのようなタイミングの問題が発生する可能性がありますか? 特に、次のような状況ではどうなるのだろうと思っています。
GC は WeakMaps にどのように影響しますか?
更新:悪いことに、WeakMap で文字列をキーとして使用できないという事実を見逃しました。その事実を考慮に入れると、私の質問はうまくいきません。
javascript - WeakMap は親子関係のメモリ リークから私を救ってくれますか?
こんな感じの親子関係です。
parent
およびへの他のすべての参照child
が削除されると、メモリ リークが発生しますか? 残っている参照のみが相互になります。循環参照によるメモリリークが発生する場合、私を
WeakMap
救ってくれますか?
を使用してWeakMap
、
parentMap
それ以来、への参照があり、 への参照があるparent
とparent
思いますchild
。まだ循環参照があります。
javascript - WeakMap の clear() メソッドが非推奨になったのはなぜですか?
私は JavaScript でWeakMapclear
を使用してきましたが、ドキュメントを確認した後、このメソッドがECMAScript 6 から非推奨/削除されていることに気付きました。
これの理由は何ですか?次のような明確な機能を強制する理由:
javascript - キーとしてオブジェクトがある場合、WeakMap で Map を使用するのはいつですか?
オブジェクトをマップのキーとして使用したことが数回ありましたが、その特定のオブジェクトに関するメタデータを格納するために使用しました。WeakMap
キーとして使用していたオブジェクトがガベージ コレクションされると、マップ内のエントリが自動的にガベージ コレクションされるという利点があるため、これには常に a を使用してきました。
メタデータの保存は、オブジェクトをマップのキーとして考えることができる唯一の使用例ですが、オブジェクトをキーとして使用する他の使用例があるかどうかに興味がありMap
ますWeakMap
。
javascript - JavaScript WeakMap が gc されたオブジェクトを参照し続ける
--js-flags="--expose-gc" を指定して実行している Google Chrome 開発者コンソールでこのコードを試した後、JavaScript のウィークマップで経験しています。 GCした。