繁体   English   中英

为什么有人会在私有模式下使用内存映射文件?

[英]Why would someone use a Memory Mapped File in PRIVATE mode?

除了:

私有:对结果缓冲区所做的更改不会传播到文件,并且对映射相同文件的其他程序不可见; 相反,它们将导致创建缓冲区修改部分的私有副本。 (MapMode.PRIVATE)

在什么情况下它是可取的,它有什么优点?

如果您在大型数据集上运行遗传算法实验,您可能希望启动八个或更多客户端——每个内核一个,每个内核两个,等等——以使用相同的起始数据,对数据,然后只保存随机数生成器的起始种子的“最终结果”和衡量算法的“分数”。

中间结果可能没有任何价值,您不希望任何客户端看到来自其他客户端的中间结果,也不希望污染初始种子数据。

在什么情况下它是可取的,它有什么优点?

当您想要对不应该持久化的映射数据进行临时更改时,可以使用它,并且不应该对其他可能已映射文件的应用程序可见。

在这种用例中,应用程序可以将文件内容显式复制到byte[] ,也可以在PRIVATE模式下映射文件

期望 JVM + OS 将以比 Java 应用程序代码更有效的方式处理私有模式下的数据复制。 例如,当应用程序第一次尝试更新其缓冲区的相应区域时,JVM + OS 可能会使用本机虚拟内存子系统来复制映射 VM 页面中的数据。

MapMode.PRIVATE的实际实现方式是特定于平台的。 如果您需要了解详细信息,请参阅您的 JVM 源代码和操作系统源代码。

例如,在 Linux 系统中,进程的 .text 段以 PRIVATE 模式加载,事实上,它们最初以 Copy On Write 模式共享内存,如果进程中的一个尝试修改其代码,则只有该进程会受到影响,并且不是对文件系统的任何传播。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM