内存映射文件是由OS管理的吗?

时间:2015-03-12 16:08:06

标签: java memory-mapped-files

我一直在阅读有关内存映射文件的内容,我有几个问题:

  1. 他们是操作系统受管理还是存在于JVM堆中,因此需要进行垃圾回收。
  2. 如果他们是操作系统管理的,我知道这是依赖于操作系统的,但如果我有两个进程(Java或不是Java)内存映射文件,他们可能会看到相同的位记忆(即。给定1MB文件,如果10个进程内存映射它,它仍然只使用~1MB内存)

1 个答案:

答案 0 :(得分:3)

内存映射文件的确切实现是故意未指定的,但显而易见的意图是,如果操作系统提供此类功能,则用于实现它。

因此,对于大多数操作系统和JVM,MappedByteBuffer只是操作系统内存映射函数返回的逻辑内存的包装。它仍然需要进行垃圾收集;如果收集了指向映射区域的最后一个前端字节缓冲区,则实现将注意释放映射。

如果操作系统通过同一物理内存页面提供对文件区域的共享访问,则内存映射文件的典型Java实现将表现出该行为。这实际上是在Java中进程之间实现共享内存的最直接方式;让每个进程映射同一个临时文件的同一区域......