問題タブ [weak-references]
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.
python - Python: 有効期間の短いキーを使用したスレッド セーフな辞書、これは正しいですか?
do_thing() が同じかどうかわからない ID 番号を持つ多くのスレッドで何度も呼び出されると仮定すると (たとえば、ID 3 で 4 回、異なる ID でそれぞれ 1 回)、このスレッドは安全ですか? one_time_init() は、特定のジョブ ID に対して一度に複数回実行されることはありますか? (PS: one_time_init は、ID ごとに 1 回実行された状態を保存するため、既に完了まで実行されている場合、呼び出しはノーオペレーションです)
更新されたコード (THC4k に感謝):
java - Javaの参照クラスを理解する:SoftReference、WeakReference、およびPhantomReference
誰かが3つのリファレンスクラスの違いを説明できますか(または素敵な説明へのリンクを投稿できますか)?SoftReference
>> 、しかし、私はいつそれぞれを使用しますかWeakReference
?PhantomReference
なぜあるのにWeakHashMap
ないのSoftHashMap
かPhantomHashMap
?
そして、次のコードを使用すると...
...何が起こるのですか?ref
すべてのステートメントの前にnullかどうかを確認する必要がありますか(これは間違っていますが、どうすればよいですか)?急いで質問して申し訳ありませんが、これらのReference
クラスを理解するのに苦労しています...ありがとう!
silverlight - Silverlight WP7 メッセージング、WeakReference を使用する必要がありますか?
Windows Phone Silverlight アプリ用の単純なメッセージング システムを作成しています。
アイデアは、さまざまな xaml ページと他のオブジェクトがメッセージング オブジェクトにサブスクライブし、受信/処理するメッセージの種類と Action<> デリゲートをハンドラーとして渡すことです。
アクションが発生すると、メッセージ (ペイロード付き) が正しいサブスクライバーに送信されます。
これは、メッセージ クラスとして必要なものの簡単なドラフトです。
したがって、さまざまなサブスクライバーは、タイプ Action で自分自身を追加します。私が理解しているように、元のページ/オブジェクトへの参照が常に存在するため、元のページ/オブジェクトがガベージ コレクションされるのを防ぐことができます (そうでないと思いますか?)。
私は実際にサブスクライブを解除することはできません。また、常にそうであるとは限りません。メッセージング キューは、アプリケーションの存続期間中そのままです。
WeakReferences を実装する必要がありますか?
WeakReferences はオーバーヘッドを追加しますか?
使用中のメモリが小さいため、これを考慮することさえ狂っていますか?
c# - デストラクタでWeakReferenceが役に立たないのはなぜですか?
次のコードを検討してください。
次の出力で:
なぜそれは偽でヌルなのですか?Aはまだ収集されていません。
編集:ああ、あなたがたはほとんど信仰がありません。
次の行を追加しました。
更新された出力を参照してください。
iphone - Objective-Cで弱参照を作成するにはどうすればよいですか?
私はこのような状況にあります:
ここに保持サイクルがあります。この保持サイクルを解除するにはどうすればよいですか?(弱参照を使用)...上記の例では。ありがとう
c# - How do events cause memory leaks in C# and how do Weak References help mitigate that?
There are two ways (that I know of) to cause an unintentional memory leak in C#:
- Not disposing of resources that implement
IDisposable
- Referencing and de-referencing events incorrectly.
I don't really understand the second point. If the source object has a longer lifetime than the listener, and the listener doesn't need the events anymore when there are no other references to it, using normal .NET events causes a memory leak: the source object holds listener objects in memory that should be garbage collected.
Can you explain how events can cause memory leaks with code in C#, and how I can code to get around it using Weak References and without Weak References?
android - アクティビティへの弱参照(Android)
私のAndroidアプリでは、ユーザーが1つのアクティビティから別のアクティビティに移行しようとすると、最初に他のアクションを完了する必要があることを示すグローバルな状態が発生する場合があります。
これを実現するために、次のコードを使用してクラスを作成しました。
ブロッキングアクティビティが終了すると、ThisClass.blockingActivityFinished()が呼び出されます。これにより、古いアクティビティへの弱参照がまだ存在するかどうかが確認され、存在する場合は、そのアクティビティから元のインテントが起動されます。そうでない場合は、アプリケーションのコンテキストから元のインテントを起動します。
私の質問は、
これは正気ですか?この手法で潜在的なメモリリークの問題はありますか?これを達成するためのより良い方法はありますか?
編集-明確にするために、中断をトリガーする可能性のあるイベントのタイプは、1)現在のアプリのバージョンが非推奨であることを示すサーバーping 2)ユーザーの資格情報が無効になったことを示すサーバーRPCです。これらのチェックを処理し、完了したら通常どおりビジネスを再開するために、すべてのアクティビティにロジックを追加したくありません。これはDRYの違反であり、チーム環境ではエラーが発生しやすくなります。
java - 強力な参照が存在する場合に既存のオブジェクトを返すことが保証されたスレッドセーフなオブジェクトプール?
Clojure言語を拡張して、ACI保証の参照をACID保証のdref(耐久性のある参照)に拡張しようとしています。APIは、単純にを呼び出すためのものです(dref key value)
。ここでkey
、は基になるデータストア(現在の実装ではBDB JE)で使用されるキーの文字列でありvalue
、drefを初期化する必要があるオブジェクトです。key
DBにすでに存在する場合は、代わりに保存された値が使用されます。
同じキーで複数のdrefを作成でき、それらを同期する必要があります。つまり、キー「A」を持つ1つのdrefが、キー「A」で書き込まれたり読み取られたりするトランザクションに参加する場合、(ensure)
キー「A」を持つ他のすべてのdrefはトランザクションである必要があります。同期:読み取りロックと書き込みロックを使用して、これらのdrefを含むトランザクションに順序を付ける必要があります。より広い意味では、同じキーを持つ複数のメモリ内drefが存在する場合がありますが、そのキーを持つすべてのdrefは単一の論理オブジェクトです。
明らかな理由から、この単一の論理drefが単一の具象インメモリdrefで実装されていることを確認する方がはるかに簡単です。そうすれば、同期するものは何もありません。どうすればよいですか?
明白な答えは、keyにキー設定されたオブジェクトプールを使用することです。次に、Clojureは静的getInstance(key,value)
メソッドを呼び出して、存在する場合はプールから取得し、存在しない場合は作成してプールにデータを入力します。このアプローチの問題は、完了時にClojureにオブジェクトを解放させる簡単な方法がないことです。メモリリークのある都市。強い参照を持つオブジェクトが収集されないようにし、それらがプールに存在するようにする必要があります。別のプロセスが同じキーを持つ新しいdrefを作成する可能性があり、同じキーを持つ他のdrefとのトランザクションの安全性がないため、プールがまだ使用されている論理drefへの参照を失うと悲惨なことになります。
そのため、強くない参照を使用したバージョンWeakHashMap
または何かが必要です(SoftReference
GCでもう少し気が進まない場合は、を使用することをお勧めします)。それで:
- を使用する
HashMap<String,SoftReference<DRef>>
場合、エントリの値(SoftReference)が収集された場合に、マップがエントリを削除するようにするにはどうすればよいですか?ある種のデーモンスレッド? - GCのプールをスレッドセーフにするにはどうすればよいですか?
SoftReference
または、GCがレベルで動作していて、デーモンスレッドがそのレベルで動作しているので、それについて心配する必要はありませんMap
か? - 関連するメモとして、デーモンスレッドが実行されていることを確認するにはどうすればよいですか?キャッチされない場合にJVM全体をクラッシュさせる例外をスローせずに停止できる方法はありますか?その場合、必要に応じて新しいものを監視して開始するにはどうすればよいですか?
weak-references - ヴァラの「弱い」参照と「所有されていない」参照の違いは?
Valaの弱い参照と所有されていない参照の違いは何ですか.
Vala のチュートリアルから学んだことによると、弱い参照と所有されていない参照の両方がカウントされず、実際のインスタンスがスコープ外になると null(!!) が参照されます。
1つの理由で2つの異なる手段が必要なのはなぜですか?(同じ仕事をしている場合)そうでない場合、誰かが簡単な例を挙げて、それぞれの手段をいつ、なぜ使用する必要があるかを示すことができますか?!
どうもありがとう
java - GCはSoftReferenceとWeakReferenceによって参照されるオブジェクトを収集しますか?
MaptoSoftReferencesから構築されたキャッシュがあります。それらが追加されると、それらは別のキューに入れられ、gzipなどを介して遅延圧縮されます。私の考えは次のとおりです。圧縮キュー内のオブジェクトへのWeakReferencesが必要です。これにより、コンプレッサータスクがオブジェクトに到達したときに、オブジェクトが既になくなっている場合は、わざわざ圧縮する必要がなくなります。また、コンプレッサーのキューはオブジェクトを圧縮しません。 t他の方法ではGCされるオブジェクトを存続させます。
では、SoftReferenceが1つとWeakReferenceが1つしかない場合でも、SoftReferenceのセマンティクスは適用されますか?