8

Java 中的内存映射文件是否像 Windows 中的内存映射文件?还是仅仅基于Java中的内存和文件通用操作进行仿真?

4

2 回答 2

10

它使用操作系统对内存映射文件的支持。

我正在尝试查找文档来支持它,但我还没有找到任何结论性的东西。但是,文档的各个部分确实是这样说的:

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

如果一切都只是模拟,就不需要这种未指定的行为。

于 2010-11-23T22:28:38.827 回答
9

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

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

需要解决一些难题才能使其可靠:

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

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

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

于 2010-11-23T23:39:48.480 回答