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