2010-11-23 11 views
8

JavaのメモリマップファイルはWindowsのメモリマップファイルのようですか?それとも、Javaのメモリとファイルの一般的な操作に基づいたエミュレーションだけですか?Javaメモリマップファイル?

答えて

10

メモリマップファイルのOSサポートを使用します。

私はそれを裏付ける文書を探していますが、まだ決定的なものは見つかりませんでした。しかし、ドキュメントの様々なビットがは、このようなことは言う:

メモリマップファイルの詳細の多くは、本質的に基礎となるオペレーティングシステムに依存しているため、未指定です。要求されたリージョンがこのチャンネルのファイル内に完全に含まれていない場合のこのメソッドの動作は指定されていません。このプログラムまたは他のファイルによって、内容に加えられた変更または基礎ファイルのサイズがバッファに伝播されるかどうかは不特定である。バッファへの変更がファイルに伝播される速度は指定されていません。

すべてがエミュレートされただけの場合、このような不特定の動作は必要ありません。

+0

ありがとうございました。私があなたを理解しているように、java.nioクラス(メモリマップされたファイルを操作するため)は、Windows APIのメモリマップファイル関数をラップしますか?私は正しい?))) – Edward83

+1

私はいくつかのテストを試みた。私は1つのMMFを作成し、それを2つのプロセス、すなわちWin32 C++とJava with nioで共有したいと考えました。しかし、テストでは失敗しました。なぜなら私はJavaで "Named" MMFを作成/開くことができないからです。笑))) – Edward83

9

あなたの質問とコメントの行を読んで、あなたがやろうとしていることは、JavaとC++アプリケーションの間でメモリ/オブジェクトを共有するメモリマップファイルを使用することです。

私の助言はです。これを行わないでください

作るために対処する必要があるであろう困難な問題があります。この信頼性:

  • 1つのアプリケーションによって行われた変更が確実に書き込まれますことを保証し、
  • を共有データ構造の2つのアプリケーションの使用を同期
  • 期待される順序で変更がディスクに書き込まれるようにします。

Java固有の問題は、Javaオブジェクトをメモリーマップ領域に配置できないことです。その代わりに、C++側が期待している表現と互換性のある何らかの方法で、それらを直列化および逆シリアル化する必要があります。あなたはのバージョンを変更した場合、潜在的を変更することがあり

あなたはこれらの問題のすべてに対処することに成功しない場合でも、最後に、あなたのソリューションは、それがOSの不特定の動作に依存しているため、脆弱である可能性が高い、C++やJavaの実装上記のいずれか。

+0

答えてくれてありがとう!有用な助言;) – Edward83

関連する問題