|
|
1
3
让我逐一回答你的问题。
你的陈述不是无效的。 尽管如此,重要的是不要错过简单的事实。文件数据的访问总是涉及缓存( except when it does not )。如果缓存中的内存映射页映射到您的地址空间,则会涉及FileChannel额外内存拷贝。
否,FileChannel。读取(缓冲区、位置)涉及额外的内存拷贝。无论如何,数据将在缓存中保留一段时间。
你的推理是错误的。对于任何一种数据访问模式,FileChannel都会进行额外的内存到内存拷贝,而MappedByteBuffer则不会。 此外,内存映射本质上是懒惰的。只有在访问相应的内存页时,才从磁盘加载数据。
您可以将比物理内存大几个数量级的文件映射到机箱上(单个MappedByteBuffer限制为2GiB,因此需要多个映射)。通过映射访问文件数据的页面可以随时被操作系统收回。 实际上,就GC而言,MappedByteBuffer并不占用堆。 在FileChannel和MappedByteBuffer之间选择什么?使用内存映射数据还有其他令人讨厌的含义。
这使得MappedByteBuffer成为一种奇特的、很少使用的数据访问方式。 如果我建议你 避免 MappedByteBuffer如果
|
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |