質問

Javaのメモリマップファイルは、Windows用のメモリマップファイルのようなものですか?それとも、Javaのメモリとファイルの共通操作に基づいてのみエミュレーションですか?

役に立ちましたか?

解決

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

私はそれをバックアップするためのドキュメントを見つけようとしていますが、私はまだ決定的なものを見つけていません。ただし、ドキュメントのさまざまなビット 行う このようなことを言う:

メモリマップされたファイルの詳細の多くは、本質的に基礎となるオペレーティングシステムに依存しているため、不特定です。要求された領域がこのチャネルのファイルに完全に含まれていない場合のこの方法の動作は、不特定です。このプログラムまたは他のプログラムによるコンテンツまたは基礎となるファイルのサイズに変更された変更がバッファーに伝播されるかどうかは不特定です。バッファーの変更がファイルに伝播されるレートは不特定です。

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

他のヒント

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

私のアドバイスはです これをしようとしないでください.

これを信頼できるものにするために対処する必要がある困難な問題があります。

  • 共有データ構造の2つのアプリケーションの使用を同期する、
  • 1つのアプリケーションによって行われた変更がメインメモリに確実に書き込まれ、もう1つのアプリケーションが読み取るようにすることで、
  • 予想される順序で変更がディスクに洗い流されるようにします。

Java固有の問題は、Javaオブジェクトをメモリマッピング領域に配置できないことです。代わりに、C ++側が期待している表現と互換性のある何らかの方法でそれらをシリアル化して脱必要にする必要があります。

最後に、これらの問題のすべてに対処することに成功したとしても、OS、C ++、およびJavaの実装の不特定の動作に依存するため、ソリューションは脆弱である可能性があります それは潜在的に変化する可能性があります 上記のいずれかのバージョンを変更した場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top