0

インメモリ データ構造を開発しており、永続性を追加したいと考えています。

これをすばやく行う方法を探しています。たまにヒープダンプをダンプすることを考えました。

この Java ヒープ ダンプをそのままメモリにロードする方法はありますか? それとも不可能ですか?

それ以外の場合、情報全体の高速書き込みと高速読み取りに関する他の提案はありますか? (シリアル化には時間がかかる場合があります)

-----編集された説明:-------- 私の記憶は小さな情報でいっぱいで、相互に参照している可能性があるため、シリアル化には私が必要になる場合があります効率的にすべての記憶をスキャンします。リロードも問題になる可能性があります。

一方、私は巨大な配列を定義することができ、作成した各オブジェクトを配列に入れます。リンクは、配列内の場所を表す長い数字になります。これで、この配列をそのままダンプして、そのままリロードすることができます。

ディスクスペースを利用する JRockit のような jvm もあります。そのため、そのままダンプし、非常に迅速に再ロードすることが可能かもしれません。私の主張を証明するために、Java ダンプには jvm のすべての情報が含まれており、迅速に生成されます。申し訳ありませんが、4 GB のシリアル化は秒ダンプに近いものではありません。

また、メモリはメモリであり、RAM メモリ ダンプをすばやく実行できるオペレーティング システムがあります。 https://superuser.com/questions/164960/how-do-i-dump-physical-memory-in-linux

考えてみると...これは、永続的なデータ構造にとって非常に優れた戦略です。過去 10 年間、インメモリ データベースについてはかなりの誇大宣伝があります。しかし、なぜそこに落ち着くのでしょうか?フィボナッチヒープが必要な場合-「ほぼ永続的」になるようにします。つまり、5 分ごとに情報を (すばやく) ダンプし、停電の場合には 5 分前のバックアップをとります。

-----編集された説明の終わり:--------

ありがとうございました。

4

3 に答える 3

4

通常、HotSpot でこれを行う方法はありません。

ヒープ内のオブジェクトには 2 ワードのヘッダーがあり、2 番目のヘッダーはクラス メタデータ (klassOop として知られる) の permgen を指します。permgen もすべてダンプする必要があります。これには、コンパイルされたコードへのすべてのポインターが含まれます。つまり、基本的にプロセス全体です。

ヒープの状態を正しく回復する正気の方法はありません。

構築したいものと、既存の製品が必要なことを実行しない理由を正確に説明する方がよい場合があります。

于 2013-07-22T12:48:55.583 に答える