据我所知,MappedByteBuffer
在调用FileChannel.map
之后“将文件内容映射到内存中,但不一定要加载整个文件。所以,如果我开始阅读,例如在pos(0)处,页面可能实际上在那时从磁盘加载,例如文件的第一个4096字节,进入主内存(Heap之外,因为它是直接内存缓冲区)。
我的问题是 - 如果我在缓冲区上调用load()
方法会怎样?最好的方法是尝试将ENTIRE文件映射到内存中,例如准确加载1GB的数据,考虑到这是我映射的数量?
答案 0 :(得分:1)
是否会尝试将整个ENTIRE文件映射到内存中,例如准确加载1GB的数据,考虑到这是我映射的数量?
基本上是的。 JVM将尝试来实现这一目标。
但“尽力而为”意味着无法保证整个文件都会被加载。并且无法保证文件将保持加载状态。
行为最终由操作系统(管理虚拟内存资源)决定,它取决于系统上有多少物理内存,其他应用程序需要什么,以及可能还有其他内容。