Java のメモリ マップ ファイルは、Windows のメモリ マップ ファイルと同じですか? それとも、Java でのメモリとファイルの共通操作に基づいたエミュレーションのみですか?
2 に答える
メモリ マップ ファイルの OS サポートを使用します。
それを裏付ける文書を見つけようとしていますが、決定的なものはまだ見つかりません。ただし、ドキュメントのさまざまな部分は次のように述べています。
メモリ マップト ファイルの詳細の多くは、基になるオペレーティング システムに本質的に依存しているため、指定されていません。要求された領域がこのチャネルのファイル内に完全に含まれていない場合のこのメソッドの動作は規定されていません。このプログラムまたは別のプログラムによって、基になるファイルの内容またはサイズに加えられた変更がバッファーに伝達されるかどうかは指定されていません。バッファへの変更がファイルに反映される速度は規定されていません。
すべてがエミュレートされていれば、そのような不特定の動作は必要ありません。
質問とコメントの行間を読んで、あなたがしようとしているのは、メモリ マップ ファイルを使用して Java と C++ アプリケーション間でメモリ/オブジェクトを共有することです。
私のアドバイスは、これをやろうとしないことです。
これを信頼できるものにするために対処する必要がある難しい問題があります。
- 2 つのアプリケーションによる共有データ構造の使用を同期する
- 1 つのアプリケーションによって行われた変更が確実にメイン メモリに書き込まれ、別のアプリケーションによって読み取られるようにします。
- 変更が期待される順序でディスクにフラッシュされるようにします。
Java 固有の問題は、Java オブジェクトをメモリ マップ領域に配置できないことです。代わりに、C++ 側が予期している表現と互換性のある方法でシリアル化および逆シリアル化する必要があります。
最後に、これらの問題すべてに対処できたとしても、上記のいずれかのバージョンを変更すると変更される可能性がある OS、C++、および Java 実装の不特定の動作に依存するため、ソリューションは脆弱である可能性があります。