問題タブ [lru]
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.
caching - EhcacheとApacheJCS-これはどのように機能しますか?
いくつか(〜100)の巨大なオブジェクト(たとえば〜10MB)を格納するためにLruキャッシュが必要です。EhcacheとJSCについて読みましたが、1つ質問があります。私の場合:ehcacheに10個のオブジェクトを保存します。次に、それらから1つを取得し、参照に割り当てます。参照オブジェクトとキャッシュのデータが重複しているか、JVMメモリの同じオブジェクトを示しているかどうか。
scala - ScalaのLRUCache?
Guava には優れたキャッシング ライブラリがあることは知っていますが、 cache.getOrElse(query, { /* expensive operation */})
. Scalaz のメモも見ましたが、lru の有効期限がありません。
android - Memory-Leaks Image-Gallery Android - 他のアプリケーションはどのように処理できますか?
画像ギャラリーを実装しようとしています。これには、〜5〜15個の小さい画像と「現在選択されている」1つの大きい画像が表示されます。
次のようになります: http://www.mobisoftinfotech.com/blog/wp-content/uploads/2012/06/galleryDemo.png
多くの情報源を調べた結果、ビットマップ キャッシュ (lru-cache) を使用することにしました (このフォーラムのユーザーに感謝します!)。
現時点ではメモリリークは発生していませんが、スクロールするたびに一部の画像がキャッシュから削除され、それらをリロードする必要があるため、このソリューションには満足していません...ユーザーは画像をリロードしています...反対側にスクロールするたびに0.5〜1秒待つのは本当に面倒です...
画像の取得を間違える可能性はありますか? 現時点では、単一選択の画像には 320x480 の解像度を使用し、下部のリストには 64x64 の解像度を使用します...
本当に奇妙なのは、画像の解像度がどれほど大きいかは問題ではないという事実です.64x64画像のみを選択しても、lru-cacheはいくつかの画像を削除します... lruキャッシュ?
次のコードは私の実装を示しています。
クラス BitmapCache:
どうもありがとうございました :(
いくつかのコード: BitmapWorkerTask:
java - このキャッシュ マップの使用法は、マルチスレッド環境で安全ですか?
Commons Collections LRUMap (基本的には LinkedHashMap に小さな変更を加えたもの) を使用して、ユーザーの写真用の LRU キャッシュを実装しています。findPhoto メソッドは、数秒以内に数百回呼び出すことができます。
使用法:
ご覧のとおり、同期ブロックは使用していません。ここでの最悪のシナリオは、2 つのスレッドが同じ userId に対して cache.put(userId, photo) を実行する原因となる競合状態であると想定しています。ただし、データは 2 つのスレッドで同じであるため、問題にはなりません。
ここでの私の推論は正しいですか?そうでない場合、パフォーマンスに大きな影響を与えずに同期ブロックを使用する方法はありますか? 一度に 1 つのスレッドだけがマップにアクセスするのはやり過ぎのように感じます。
python - インスタンスごとのPythonLRUキャッシュデコレータ
ここにあるLRUキャッシュデコレータの使用:http: //code.activestate.com/recipes/578078-py26-and-py30-backport-of-python-33s-lru-cache/
これで装飾されたクラスメソッドを作成できますが、最終的にはクラスTestのすべてのインスタンスに適用されるグローバルキャッシュが作成されます。ただし、私の意図は、インスタンスごとのキャッシュを作成することでした。したがって、3つのテストをインスタンス化する場合、3つのインスタンスすべてに対して1つのLRUキャッシュではなく、3つのLRUキャッシュがあります。
これが発生していることを示す唯一の兆候は、異なるクラスインスタンスで装飾されたメソッドでcache_info()を呼び出すときに、すべて同じキャッシュ統計を返すことです(非常に異なる引数と相互作用しているため、発生する可能性は非常に低いです)。
このデコレータに各クラスインスタンスのキャッシュを簡単に作成させるデコレータまたはトリックはありますか?
java - Java の LRU アルゴリズム
現在、次のようなカスタム クラスの配列があります。
私のPhy
クラス内には、次の機能があります。
- タイムスタンプ取得 (タイムスタンプを返す)
- タイムスタンプの更新 (システム時間を使用し、1970 年以降のミリ秒を取得して設定します)
LRU クラスを見つけるための LRU 部分に関しては、次のようにします。
これは基本的に最も古いタイムスタンプを探します。
私が今気付いた問題は、プロセッサが MS でこれらの操作の多くを行うことができ、役に立たないアルゴリズムを残すことです。
これを並べ替えるにはどうすればよいですか?
java - LRUおよびMRUキャッシュエビクションポリシーのソートされたキーのデータ構造
私は、キャッシュ排除ポリシーを実装する単純なデータ構造に取り組んでいます。実装したい2つの可能なシナリオは、LRUとMRUです。
どのキャッシュブロックが最も最近使用されたか、または最も最近使用されなかったかを知るために、キーがおそらく時間(または単に自動インクリメントされた整数)であるマップのようなデータ構造を探しています。そして、値はブロックのIDです。
挿入時にキーでデータを並べ替え、O(1)時間で特定のキーの値を取得する既存のデータ構造はありますか?
たとえば、JavaのHashMapには定数時間ルックアップがありますが、実装しているアルゴリズムに応じて、すべてのキーを取得して並べ替え、最後または最初を選択する必要があります。SortedMapは私が何をすべきか?LRUおよびMRUの実装でうまく機能する他のデータ構造を提案しますか?
ありがとう
c++ - LRU アルゴリズムの理解を深める
テクスチャ キャッシングのために、3D レンダラーに LRU アルゴリズムを実装する必要があります。Linux の C++ でコードを記述します。
私の場合、テクスチャ キャッシングを使用して、画像データの「タイル」(16x16 ピクセル ブロック) を格納します。ここで、キャッシュ内でルックアップを行い、ヒットを取得したとします (タイルはキャッシュ内にあります)。そのエントリの「キャッシュ」の内容を関数の呼び出し元に返すにはどうすればよいですか? 私は説明する。タイルをキャッシュ メモリにロードするときに、たとえば 16x16 ピクセルを格納するためにメモリを割り当ててから、そのタイルの画像データをロードすることを想像します。キャッシュ エントリの内容を関数の呼び出し元に渡す方法は 2 つあります
。1) タイル データへのポインタとして (高速でメモリ効率が高い)2) または、関数の呼び出し元によって割り当てられたメモリ空間内のキャッシュからタイル データを再コピーする必要があります (コピーが遅くなる可能性があります)。
私は 1) を使用しますが、問題は、ルックアップの直後にタイルがキャッシュから削除され、関数がリターン ポインターを使用してデータにアクセスしようとするとどうなるかということです。これに対する唯一の解決策は、参照カウント (auto_ptr) の形式を使用することです。データは、使用されなくなったときにのみ実際に削除されますか?
アプリケーションは複数のテクスチャにアクセスする場合があります。各テクスチャとテクスチャの各タイルに固有のキーを作成する方法が見つからないようです。たとえば、ファイル 1 のタイル 1 とファイル 2 のタイル 1 がキャッシュにある場合、tildId=1 で検索するだけでは十分ではありません...しかし、ファイルを説明するキーを作成する方法が見つからないようです。名前と tileID。ファイル名と tileID (FILENAME_TILEID) を含む文字列を作成できますが、キーとして使用される文字列は整数よりもはるかに遅くなりませんか?
最後に、タイムスタンプについて質問があります。多くの論文では、キャッシュ内のエントリの順序付けにタイム スタンプを使用することを提案しています。タイムスタンプを使用するのに適した関数は何ですか? time() 関数、clock()? タイムスタンプを使用するよりも良い方法はありますか?
申し訳ありませんが、非常に長いメッセージであることは承知していますが、LRU の実装は思ったほど簡単ではないようです。
c++ - LRUキャッシングとマルチスレッド
LRUキャッシング(C ++)の優れた設計について質問するために、私はすでにしばらく前に投稿しました。あなたはそこに質問、答えといくつかのコードを見つけることができます:
私は今、このコードを(pthreadを使用して)マルチスレッド化しようとしましたが、いくつかの本当に予期しない結果が得られました。ロックを使用する前に、各スレッドが独自のキャッシュにアクセスするシステムを作成しました(コードを参照)。このコードは4コアプロセッサで実行します。1スレッドと4スレッドで実行してみました。1つのスレッドで実行する場合、キャッシュで100万回のルックアップを実行し、4つのスレッドで各スレッドが25万回のルックアップを実行します。私は4つのスレッドで時間の短縮を期待していましたが、その逆です。1スレッドは2.2秒で実行され、4スレッドは6秒以上で実行されますか?この結果を理解することはできません。
私のコードに何か問題がありますか?これはどういうわけか説明できますか(スレッド管理には時間がかかります)。専門家からのフィードバックがあれば素晴らしいと思います。どうもありがとう -
私はこのコードを次のようにコンパイルします:c ++ -o cache cache.cpp -std = c ++ 0x -O3 -lpthread
java - LRU キャッシュを実装する最良の方法
LRU キャッシュの効率的な実装を作成したいと考えています。最も便利な方法は を使用することですLinkedHashMap
が、残念ながら多くのスレッドがキャッシュを使用している場合は非常に遅くなります。私の実装はここにあります:
多くのスレッドがメソッドを呼び出そうとしている場合、この実装は非常に遅くなります (同期のため) get()
。より良い方法はありますか?