問題タブ [chronicle-map]
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 - ChronicleMap (およびより一般的なオフヒープ データ構造) の実装?
Githubの OpenHFT のリポジトリの ChronicleMapは、ドキュメントで次のように述べています。
私はコンパイラを構築し、いくつかの派生言語のコンパイラ実装に貢献しました。私が取り組んだものは、すべてをスタックに割り当てます (これは、コード生成中に利用できるものです)。私は JVM と Java コンパイラに取り組んだことはありませんが、通常、クラス、ローカル変数、関数パラメーターなどのインスタンスを割り当てるために利用できるのはヒープとスタックだけであることは知っています。
ChronicalMap などのデータ構造をインスタンス化し、それらを JVM によるガベージ コレクションで使用できるようにする (そして JVM の一般的なメモリ管理で追跡する) ようにコンパイラに指示できるコードを作成する方法を誰か説明してください。機能)、しかし、ヒープから生計を立てていますか?
簡単な構造のドキュメントと関連する例を読みました。わかりますhow
が、JVM との関連で正確に何が起こっているのか、その根底にある理由は不明です。
java - クロニクル マップ UnsupportedClassVersionError
ChronicleMap を試してみたところ、「UnsupportedClassVersionError: Unsupported major.minor version 52.0」という問題がすぐに発生しました。
Java 7 を使用しています... このエラーは、Chronicle Map が Java 8 でコンパイルされていることを意味すると解釈すべきですか? これを修正するには、ソースコードをダウンロードして Java 7 でコンパイルする必要がありますか?
java - Chronicle Map を使用した JVM クラッシュ
Chronicle Map を使用しようとすると、解決できなかった多くのエラーが発生します。最近のデバッグの試みでは、ストリームをメモリに読み込んでバイトが何であるかを確認しましたが、JVM 全体がクラッシュしました。
私は Kryo を使用してデータを書き込み、BytesMarshaller<T>
次のような for each タイプを使用して読み戻しています。
書くとこれを読む:
ストリームを閉じようとしましたが、まったく同じ問題が発生します。
この問題は、キー セットを繰り返し処理し始めたときに発生します。関連性があるかどうかはわかりません。
これは私のスタックトレースです:
chronicle - クロニクルの前にオンヒープ キャッシュを置く
永続的なオフヒープ クロニクル キャッシュの前にオンヒープ キャッシュ (グアバ キャッシュなど) を置くのは理にかなっていますか? では、guava キャッシュ ミスが発生した場合は、クロニクル キャッシュを使用しますか?
ありがとう
java - クロニクル マップ - 値のデータ型
値側がマップまたはセットである記録マップを実装する最良の方法は何ですか?
特定の ID を持ついくつかのデータの複数のバージョンを保存できる、次のようなデータ構造が必要です。
または場合によっては 2 つのマップ:
(原子性とシリアライゼーションのパフォーマンスが私の主な関心事です)。acquireUsingLocked/getUsingLocked
メソッドは、標準のマップ/セットの実装では機能しないようです。
chronicle - ChronicleMap の WriteContext の使用
ChronicleMap (2.1.7) を調べると、 acquireUsingLocked(); を呼び出すときの WriteContext の適切な使用法について正確にはわかりません。
私が興味を持っているシナリオは、関数呼び出し元の観点からアトミックに 2 つのアクションを実行する必要がある関数です。それらの 1 つは、存在しない場合、マップにエントリを追加することです。もう 1 つは、マップ内の指定されたキーの値が以前になかった場合にのみ実行されます。
マップ内の特定のキーに対する値が以前になく、この 2 番目のアクションが失敗した場合、後続のテストで対応するキーの値が見つからないように、マップを更新しないでください。
指定されたキーのマップに既にエントリがあった場合、元の値を更新したくなく、この 2 番目のアクションを実行したくありません。ただし、呼び出し元の戻り値を作成するには、元のエントリの値を使用する必要があります。
WriteContext.created() のドキュメントには、エントリが以前に存在した場合にのみ true を返すと記載されています。エントリが以前に存在していた場合、コンテキストから以前の値への参照を取得することは可能ですか (または、WriteContext スコープ内で map.get() を呼び出すなどの他の方法)?
WriteContext.value() は何を参照していますか? 前のエントリの値か、acquireUsingLocked() への呼び出しで提供した潜在的に更新された値?
また、以前にマップにエントリがなく、マップを更新したくない場合は、WriteContext.removeEntry() または WriteContext.dontPutOnClose() を呼び出す必要がありますか?
必要だと考えているロジックの例を次に示します。