|
|
1
3
让我逐一回答你的问题。
你的陈述不是无效的。 尽管如此,重要的是不要错过简单的事实。文件数据的访问总是涉及缓存( except when it does not )。如果缓存中的内存映射页映射到您的地址空间,则会涉及FileChannel额外内存拷贝。
否,FileChannel。读取(缓冲区、位置)涉及额外的内存拷贝。无论如何,数据将在缓存中保留一段时间。
你的推理是错误的。对于任何一种数据访问模式,FileChannel都会进行额外的内存到内存拷贝,而MappedByteBuffer则不会。 此外,内存映射本质上是懒惰的。只有在访问相应的内存页时,才从磁盘加载数据。
您可以将比物理内存大几个数量级的文件映射到机箱上(单个MappedByteBuffer限制为2GiB,因此需要多个映射)。通过映射访问文件数据的页面可以随时被操作系统收回。 实际上,就GC而言,MappedByteBuffer并不占用堆。 在FileChannel和MappedByteBuffer之间选择什么?使用内存映射数据还有其他令人讨厌的含义。
这使得MappedByteBuffer成为一种奇特的、很少使用的数据访问方式。 如果我建议你 避免 MappedByteBuffer如果
|
|
codeforester · 测量GC暂停时间的最佳方法是什么? 8 年前 |
|
|
Venki WAR · 需要解释G1的并行完整GC 8 年前 |
|
|
Stephan_Berlin · 为什么CMS系列中的初始标记阶段 8 年前 |
|
|
Bonsaisteak · 为什么年轻一代需要三个区域来收集垃圾? 8 年前 |
|
|
goks · 如何清除熊猫的数据帧内存? 8 年前 |