[解決済み] JavaでLRUキャッシュを実装するとしたら、どのようにしますか?
2022-04-22 17:56:32
質問
EHCacheやOSCacheなどとは言わないでください。この質問では、SDKだけを使って自分で実装したいと仮定します(やりながら学ぶ)。キャッシュをマルチスレッド環境で使用することを考えると、どのデータ構造を使用するでしょうか?私はすでに以下を使用して1つを実装しています。 LinkedHashMap と コレクション#synchronizedMap しかし、新しい同時実行コレクションがより良い候補になるかどうか気になるところです。
UPDATE: 私はちょうど読んでいた Yeggeの最新作 と思っていたら、こんなものがありました。
<ブロッククオートもし定時アクセスが必要で、挿入順序を維持したいのであれば、LinkedHashMap以上のものはないでしょう。LinkedHashMapは本当にすばらしいデータ構造だ。これ以上すばらしいものはないだろう。しかし、残念なことに。
にする前は、ほぼ同じことを考えていました。
LinkedHashMap
+
Collections#synchronizedMap
の実装を紹介しました。私が何かを見落としていなかったことが分かってよかったです。
これまでの回答から、高度な同時実行LRUを実現するための最善の策は
ConcurrentHashMap
と同じロジックで
LinkedHashMap
を使用しています。
解決方法は?
もし私が今日また一からこの作業をするとしたら、Guavaの
CacheBuilder
.
関連
-
jd-gui Java Exceptionが発生しました。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
この行に複数のマーカーがある - HttpServletResponseが型エラーに解決できない
-
undefinedeclipse エラー。この行に複数のアノテーションが見つかりました: - 文字列を型解決に解決できない
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 0 at One1.main(One1.java:3)
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。