1

据我所见MappedByteBuffer,在调用FileChannel.map“映射”文件内容到内存后,但不一定将整个文件加载进去。所以,如果我开始阅读例如在 pos(0),页面可能实际上是从那时的磁盘,例如文件的前 4096 字节,进入主内存(在堆之外,因为它是直接内存缓冲区)。

我的问题是 - 如果我load()在缓冲区上调用方法会发生什么?考虑到这是我映射的数量,是否会尽量将整个文件映射到内存中,例如准确加载 1GB 的数据?

4

1 回答 1

1

考虑到这是我映射的数量,它会尝试将整个文件映射到内存中,例如准确加载 1GB 的数据吗?

基本上是的。JVM 将尝试实现这一点。

但是“尽力而为”意味着不能保证整个文件都会被加载。并且不能保证文件将保持加载状态。

行为最终由操作系统(管理虚拟内存资源)决定,它取决于系统上有多少物理内存、其他应用程序需要什么以及可能取决于其他事物。

于 2014-03-14T14:12:12.257 回答