問題タブ [soft-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.
java - google-guava MapMaker .softValues() - 値は GC 処理されません。OOME: HeapSpace が続きます
google-guava の MapMaker の使用に問題があります。コードは次のとおりです。
Java が次のように呼び出されるとjava -Xms2m -Xmx2m -cp guava-r09.jar:. test.MapMakerTest(ヒープ設定は、何が起こるかを簡単に確認できるように意図的に非常に小さくなっています)、60 回目の反復のあたりで、OutOfMemoryError: HeapSpace で爆発します。
ただし、マップがMap<String, SoftReference<String>>(そして、コードの残りの部分 (リスナーと put) の変更に応じて変更されている場合) は、エビクションが行われていることがわかり、コードは単純に機能し、値はガベージ コレクションされます。
http://guava-libraries.googlecode.com/svn/tags/release09/javadoc/index.htmlを含むすべてのドキュメントで、SoftReferences について明示的に言及されていません。put が呼び出されたときに Map 実装が SoftReference の値をラップすることになっていませんか? 私は想定される使用法について本当に混乱しています。
私はグアバr09を使用しています。
誰かが私が間違っていること、そしてなぜ私の仮定が間違っているのか説明できますか?
よろしく、 ウージェク
java - 弱参照および/または弱参照オブジェクトを強制的に Java で GC する方法はありますか?
これが私のユースケースです。アプリケーションで発生する可能性のあるメモリ リークを絞り込もうとしており、メモリ分析ツールを使用してヒープのスナップショットを作成し、オブジェクト インスタンスと参照を探すことができます。(役立つ場合に備えて、YourKit を使用しています。)
このアプリケーションは、ダイナミック プロキシと CGLIB プロキシを広範囲に使用します。これにより、WeakHashMap にクラスとクラスローダーへの大量の参照が格納されます。
テスト ケースの実行後、オブジェクト X とそのクラスローダーへのすべてのハード参照がなくなることを期待していますが、テスト ケースには多くのプロキシが含まれていたため、最終的に多くの弱い/ソフト参照が残っています。(私は WeakHashMap 参照しか見つけることができませんが、YourKit は要約で弱い参照とソフト参照の両方を 1 つの項目にラップしているため、どこかでソフト参照が欠落していないかどうかはわかりません。)
これは、JVM から完全な GC を要求した後でも当てはまります。(sun 1.6.0_23 JDK をサーバーモードで使用)
JVMは、これらのオブジェクトへの弱い/ソフト参照しかないことを認めているようですが、これらのことを 100% 確実にするために GC に強制することはできません。(したがって、私が望むのは、これがヒープから完全に消え、permgen のクラスローダーの使用もなくなることです。)
ソフト/弱く参照されているオブジェクトのみを破棄するように JVM を構成および/または強制する方法を知っている人はいますか?
android - Android画像のキャッシュ-ハードとソフトのHashMapsの質問
私が今アプリ内でやろうとしているのは、コンテキストをリークすることなくImageViewsの画像を非同期的にダウンロードしてキャッシュするチュートリアルの1つでGoogleが昨年公開したImageDownloaderクラスを変更することです。
つまり、ビットマップハッシュマップへの参照を提供するグローバルキャッシュシングルトンオブジェクトを使用しているので、知っておく必要があります。アプリの特定の側面(クライアント要件)に応じて画像を個別にキャッシュする必要があるため、これらのタイプのビットマップごとにハードハッシュマップとソフトハッシュマップのペアを使用しますか、それとも、他のハードキャッシュがスペースを要求されたときにファイルを移動するソフトハッシュマップを1つだけ持つ方が効率的ですか?
python - 「ソフト参照」はPythonに存在できますか?
他の言語(Javaなど)では、オブジェクト参照は、Strong、Weak、Soft、またはPhantom(http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html)になります。
Pythonでは、参照はデフォルトで強であり、WeakRefモジュールは弱参照を許可します。
Pythonで「ソフト参照」を持つことは可能ですか?
私の特定のケースでは、作成に時間がかかるオブジェクトのキャッシュがあります。キャッシュされたオブジェクトへの参照がない場合もありますが、必要がない場合(つまり、メモリが豊富な場合)は、キャッシュされたオブジェクトを破棄したくありません。
android - Lazy List の Bitmap Cache (SoftReference、Hard) が正しく動作しないようです - Android
stackoverflow での遅延リストの読み込みに関するいくつかのトピックを読みましたが、Android のさまざまなキャッシュ レベルで作業する方法を理解しようとしています。
ここで述べたように:
私は
パフォーマンスのためのマルチスレッド、Gilles Debunne によるチュートリアル。
例。正しい方法で動作し、1.6 でも動作するように修正しました。コードは次のとおりです。
}
この例の背後にあるロジックは完全に理解していますが、なぜこれが正しく機能しないのか混乱しています。
ハード キャッシュとソフト参照キャッシュの 2 つのレベルのキャッシュがあります。ビットマップをハード キャッシュに保存し、いっぱいになったら SoftReference に保存し、ハード キャッシュの順序を変更します。
次に、アプリを閉じ、インターネットを閉じて再起動します。コンストラクターで resetPurgeTimer() を呼び出してキャッシュをクリアするため、キャッシュには何もありません。これを回避するために、キャッシュをクリアしないようにその行にコメントを付けました。アプリを再起動すると、SoftReference キャッシュに存在する 6 ~ 7 個の画像が表示されます (LogCat によると)。
GC が呼び出されたときに SoftReference キャッシュが空になる可能性があることはわかっていますが、アプリを閉じたり、wifi を無効にしたりする前でもほとんど空です...メモリが少なくてもガベージ コレクションされる SoftReferences にはよく知られているバグがあります..
この広く使用されている例に何か問題がありますか?
前もって感謝します、
アンドレアス
java - PhantomReference / SoftReference / WeakReferenceがキューに入れられている場合、それが何を参照しているかをどのように知ることができますか?
PhantomReferencesを使用していません。実際の使用例はほとんどないようです。
ファントムがキューに表示された場合、それがどのオブジェクトであるか、またはどのオブジェクトであったかをどのようにして知ることができますか?get()メソッドは役に立たないようです。JavaDocによると、
ファントム参照の指示対象には常にアクセスできないため、このメソッドは常にnullを返します。
オブジェクトがシングルトンでない限り、常にPhantomReferenceのサブクラスを使用する必要があると思います。このサブクラスには、何が死んだのかを理解するために必要なメモを配置します。
これは正しいですか、それとも私は何かを逃しましたか?
これはSoftReferencesにも当てはまりますか?弱参照の場合?
関連する使用例へのリンクは素晴らしいでしょう。
c# - C# の弱参照は実際にはソフトですか?
基本的な違いは、弱い参照は GC の実行ごとに要求される (メモリ フットプリントを低く保つ) ことになっているのに対し、ソフト参照は GC が実際にメモリを必要とするまでメモリに保持する必要がある (寿命を延ばそうとしますが、いつでも失敗する可能性があります。これは、特にかなり高価なオブジェクトのキャッシュなどに役立ちます)。
私の知る限り、弱い参照が .NET のオブジェクトの有効期間にどのように影響するかについて明確な声明はありません。それらが真の弱い参照である場合、それらはまったく影響を与えるべきではありませんが、それはまた、キャッシュの主な目的のためにそれらをかなり役に立たなくするでしょう(私は間違っていますか?)。一方、それらがソフト リファレンスのように振る舞う場合、その名前は少し誤解を招きます。
個人的には、ソフト参照のように振る舞うと想像していますが、それは単なる印象であり、根拠はありません。
もちろん、実装の詳細が適用されます。.NET の弱参照に関連する考え方について質問しています。それらは寿命を延ばすことができますか、それとも真の弱参照のように動作しますか?
(多くの関連する質問にもかかわらず、この特定の問題に対する答えはまだ見つかりませんでした。)
java - Java SoftReference、パニック GC および GC 動作
SoftReference非効率にならない限り、できるだけ多くのメモリを使用して s を使用してキャッシュを書きたいと考えています。
オブジェクトのサイズを計算するか、使用済みメモリの近似値を取得して、使用済みサイズを推定しようとしていますJVMが、行き止まりです。
SoftReferencejavadoc には、 s がメモリ対応キャッシュに適しているとさえ記載されていますが、JVM実装がSoftReferences をどのように処理するかについての厳格な規則はありません。私はJVM(バージョン6.22以上およびバージョン7)のOracle実装についてのみ話しています。
さて、私の質問(部分的、グループ化、または好きな方法で自由に答えてください):
JVMオブジェクトの最後のアクセスを考慮して、古いものだけを削除しますか? Javadoc は次のように述べています。Virtual machine implementations are, however, encouraged to bias against clearing recently-created or recently-used soft references.- メモリが不足するとどうなりますか? パニックになり、
JVMすべてのオブジェクトを食べるだけですか? JVM生き残るために必要なだけ食べて (OOMEs なし)、健康に生きるように (CPU に だけを実行させない)GCように指示するパラメータはありますか?
java - SoftReferenceを使用してAndroidでビットマップをキャッシュするとOOMが発生します
ビットマップをロードする必要のあるアプリケーションを開発しています。そしてSoftReference、キャッシュにを使用します。私はすべてのソフト参照をに関連付けReferenceQueue、ハッシュマップを使用してにアクセスしSoftReferenceます。次のように:
次に、私が次のように書くときclean():
これは、ハッシュテーブル内のすべてのSoftReferencesがnullでないかどうかをチェックします。memcacheは良さそうですが、私が書いただけの場合:
ReferenceQueueに入れられた要素を削除するだけで、ログはどんどん印刷されます=。多少の減少があっても、傾向は増加します。
http://www.ibm.com/developerworks/library/j-refs/に記載されているとおり
のreferentはSoftReferencenullに設定されます。しかし、ほとんどはSoftReferenceにありませんでしたReferenceQueue。オブジェクトがファイナライズ可能としてマークされているがファイナライズされていない状態の間ですか?ファイナライズ可能としてマークされているがファイナライズされていないビットマップはリサイクルされますか?
java - Java EE プログラミングで弱参照とソフト参照が使用される場所
私は Java EE 開発者ですが、日常のプログラミングのどこで弱い参照またはソフト参照を使用するのかわかりません。