非常简单的问题,假设Linux下的情况,不 windows。
如果我尝试为缓冲区大小非常大的巨大文件获取MappedByteBuffer,JVM是否会使用下面的虚拟内存?
另外,MappedByteBuffer会有页面错误吗?我应该确保RAM具有指定缓冲区大小的可用空间吗?
答案 0 :(得分:1)
MappedByteBuffer
的文档明确指出:
直接字节缓冲区,其内容是文件的内存映射区域。
在POSIX系统上,这意味着JRE将使用mmap
将文件内容映射到内存中。除非文件由于某种原因已经存在于内存中,否则将导致每个丢失页面的第一次访问时出现页面错误,并且虚拟内存系统可能随时遇到任何已分配内存的页面错误。监视系统I / O以查看运行应用程序的系统中是否有足够的RAM,但内核擅长确定何时在必要时交换内容。