Java内存映射文件?

时间:2010-11-23 22:25:02

标签: java winapi memory-mapped-files

Java中的内存映射文件是否适用于Windows的内存映射文件?或者它只是基于Java中的内存和文件常见操作的模拟?

2 个答案:

答案 0 :(得分:10)

它使用OS支持内存映射文件。

我正在尝试找到备份文档,但我还没有找到任何结论。但是,文档的各个部分都是这样的:

  

内存映射文件的许多细节本质上都依赖于底层操作系统,因此未指定。未指定请求的区域未完全包含在此通道的文件中时此方法的行为。是否通过此程序或其他程序对基础文件的内容或大小所做的更改传播到缓冲区是未指定的。未指定缓冲区更改传播到文件的速率。

如果只是模仿了所有内容,就不需要这种不明确的行为。

答案 1 :(得分:9)

在您的问题和评论之间进行阅读,您要做的是使用内存映射文件在Java和C ++应用程序之间共享内存/对象。

我的建议是不要尝试这样做

为了使这一点可靠,需要解决一些棘手的问题:

  • 同步两个应用程序对共享数据结构的使用,
  • 确保一个应用程序所做的更改可靠地写入主内存并由另一个应用程序读取,
  • 确保按预期顺序将更改刷新到光盘。

Java特定的问题是您无法将Java对象放在内存映射区域中。相反,您必须以某种方式对它们进行序列化和反序列化,这些方式与C ++方面期望的表示形式兼容。

最后,即使您成功解决了所有这些问题,您的解决方案也可能很脆弱,因为它取决于操作系统,C ++和Java实现的未指定行为可能会发生变化你改变了以上任何一个版本。