問題タブ [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.
android - Android: ビットマップ、SoftReferences、および OOM?
垂直 LinearLayout に一連のビューがあります。各ビューは、スクロールするとビットマップを生成して描画します。パフォーマンス上の理由から、onDraw() が呼び出されるたびにビットマップを生成したくありませんが、メモリ上の理由から、ビットマップへのハード参照を保持できません。取るべき戦略についてアドバイスを得ることができました。
私はすでに、ビットマップを生成し、それを SoftReference でラップするという明白なルートを試しました。これは 2 つの理由で失敗しました。1. 参考文献は、私が予想するよりもはるかに熱心に収集されます。2. まだ OOM が表示されます。Bitmap は特に大きくないため、これは衝撃的です。そのため、単一のビューで OOM が発生することはありません。問題のある SoftReference が解放される機会が与えられていないために OOM が発生すると思います。また、アプリケーションに 6 MB のヒープ サイズが割り当てられている場合 (DDMS ビューによると)、OOM が発生します。OOM をスローする前に、ヒープ サイズが 16 MB に拡大すると予想されます。
何かアドバイス?
java - Javaでのさまざまな参照型の使用
私は最近、Javaでソフト、ウィーク、ファントムの参照型を試してみましたが、まだ出会っていない用途があるのではないかと考えています。私は過去にそれらをさまざまな目的で使用しましたが、常に次のカテゴリに分類されています。
- ファイナライザーの代わりにファントム参照を使用する-死んだオブジェクトが復活する可能性がないため、これが好きです
- ハッシュマップで弱参照を使用してobject=>valueマッピングを保持します。ここで、マッピングは、オブジェクトが他の場所に存在する場合にのみ配置する必要があります(たとえば、ソースを作成できないライブラリ内のオブジェクトに追加情報を追加する必要がある場合に便利です。変更)
- キャッシュにソフト参照を使用する(JVMはソフト参照をずっと長く保持し、必要と思われる場合にのみ解放するため、弱参照よりもはるかにうまく機能します)。
しかし、そこには3つの用途しかなく、私がこれまでに出会ったことのない、役立つかもしれないものがもっとたくさんあると思います。すべての提案を歓迎します!
android - Android: BitmapFactory.decodeStream OutOfMemoryException - SoftReference は解決策ですか?
私は OutOfMemoryException を取得しています:
次の関数では:
FlushedInputStream (ただし、このコードを追加する前にエラーが発生しました):
基本的に、画像をダウンロードしてフレームレイアウトに配置し、フレームをフェードインおよびフェードアウトしてスライドショーを表示するアクティビティがあります。フレームレイアウトには 2 つのイメージビューの子があります。
OOMExceptions を防ぐために SoftReference が使用されていると人々が話しているのを見たことがありますが、これをコードに適用して (できれば) このエラーを防ぐ方法を理解できません。
これがどのように達成されるかを誰かが説明できますか?
caching - collection.immutable.Map [K、SoftReference [V]] googleのMapMakerを介して?
潜在的にマルチスレッド環境を想定します。(値)キャッシュと一緒にマップを使用したい。なぜ私は
他の上に?マップはSTMrefに格納されるため、不変は単純明快で問題ありません。さらに、K
そうなる可能性が高いLong
ので、を使用することができますcollection.immutable.LongMap
。
ここでグーグルコレクションを使用する利点は何でしょうか?パフォーマンスとスペースの面で?
java - SoftReference のガベージ コレクションが早すぎる
Android アプリケーションにキャッシュ メカニズムを実装しようとしています。
SoftReference
私が見つけた多くの例のように、私は を使用します。問題は、 で上下にスクロールするListView
と、ほとんどの画像がすでにクリアされていることです。アプリケーションが新しい画像をロードするたびに、アプリケーションがガベージ コレクションされていることを LogCat で確認できます。これは、目に見えない画像のほとんどListView
がなくなったことを意味します。
そのため、スクロールして前の位置 (以前に実際に画像をダウンロードした場所) に戻るたびに、画像をもう一度ダウンロードする必要があります。画像はキャッシュされていません 。
私もこのトピックについて調査しました。この記事の Mark Murphy によると、 にはバグがある (またはあった?) ようですSoftReference
。他のいくつかの結果は、同じこと (または同じ結果) を示しています。SoftReference
s がクリアされるのが早すぎます。
実用的な解決策はありますか?
android - createScaledBitmapのAndroidOutOfMemoryExceptionとSoftReferencesの役割?
私はOOMを手に入れました。私はそれが以前の質問でたくさんカバーされたことを知っています、しかし私のものは一般的にAndroidとJavaの内部と関係があります。
ランダムなポイントで画像を読み込んでいると、この恐ろしいOOM例外が発生します。
HashMap>に画像があります。SoftReferencesの定義から、メモリが十分でない場合はDrawablesがGCされると思います。
対照的に、以前の調査から、ドローアブルのビットマップは、アプリケーションヒープとは異なるヒープ(ネイティブヒープ)に割り当てられていることがわかりました。これが、DDMSで6MBのメモリを使用しているにもかかわらず、アプリがクラッシュする理由を説明しています。
また、SoftReferencesはキャッシュに「最適」であり、Androidエンジニアが使用することを推奨しているようです。
私の質問は、私のアプリケーションヒープがMAXポイントに到達することはないので、これは私のSoftReferencesがGCされないことを意味するはずです。
この問題を解決するにはどうすればよいですか?それでは、SoftReferencesを使用することで本当にメリットはありますか?私は何かを正しく理解していませんか?
ありがとう!
java - 1つのコレクションに異なる参照型を混在させる
SoftReference
、、はWeakReference
、PhantomReference
ガベージコレクションのプロセスをカスタマイズするために使用できます。それらはすべて拡張Reference<T>
されているため、1つのコレクションに混在させることができます。ハードリファレンス(最も一般的なもの)は拡張Reference<T>
されないため、1つのコレクションにハードリファレンスと他のタイプのリファレンスを混在させることはできません。私は正しいのでCustomReference<T> extends Reference<T>
、すべてのタイプのオブジェクトリンクを単一のコレクションに混合するという望ましい結果を達成するためにコレクションに入れる必要があります(Collection<Reference<T>>
)?
更新:SSCCEを作成するときに、通常の方法で拡張することはできないことがわかりましたReference<T>
(コンストラクターはパッケージローカルです)。
したがって、質問は次のように更新されます。単一のコレクションクラスを使用して、常に一部のオブジェクト(たとえば、10)を保持するキャッシュを作成し、メモリが許可されていない場合に他のオブジェクトをGCによって再利用できますか?ハード参照とソフト参照のカスタムラッパーを提供し、それらをコレクションに保存する以外に、これを行う他の手段はありますか?
android - android : SoftReference / WeakReference の例
私はOutOfMemoryError
自分のアプリケーションを取得しています。いくつかのチュートリアルを行ったとき、 を使用してこの問題を解決できることがわかりましたSoftreference/Weakreference
。しかし、私はそれを使用する方法がわかりませんSoftreference/Weakreference
。
Softreference または Weakreference の例を提供するチュートリアルをいくつか提案してください。
ありがとうございました...
java - ソフト参照を使用することの「実際的な結果」は何ですか?
グアバのドキュメントによるとMapMaker.softValues()
:
警告: ほとんどの場合、ソフト参照を使用する代わりに、キャッシュごとの最大サイズを設定する方が適切です。この方法は、ソフト参照の実際の結果に精通している場合にのみ使用してください。
ソフト参照の動作、使用、およびガベージ コレクションとのコントラクトについては、中程度の理解があります。しかし、これらの実際的な結果は、ドキュメントが暗示しているものなのだろうかと思っています。ソフト参照ではなく最大サイズを使用する方が正確なのはなぜですか? キャッシュの実装に関して、ソフト参照のアルゴリズムと動作により、ハードコードされた上限よりも効率的に使用できるようになりませんか?