我正在处理大文件,并且正在使用 MappedByteBuffer 进行读写操作。我有点缺乏知识,所以我想知道一些事情。
MappedByteBuffer buf = raf.getChannel().map(FileChannel.MapMode.READ_WRITE, offset, size);
我知道 ByteBuffer 的大小限制是 Integer.MAX_VALUE 那么我应该如何设置 MappedByteBuffer 的大小?我应该使用小块还是 Integer.MAX_VALUE?
那么如果我增加我的映射大小,我的应用程序读写性能也会提高吗?
当这个大小增加时,我的内存使用量是否也在增加?我想知道这是因为我正在创建多个文件来读写。所以也许如果一个文件分配 2gb 的内存,如果我有 6 个文件,我需要 12gb 的内存,或者我的想法完全错误。
它与 JVM -Xmx 或我的物理内存有关吗?
这是我的用法:
List<MappedByteBuffer> mappings = new ArrayList<MappedByteBuffer>();
int mSize = 25;
long MAPPING_SIZE = 1 << mSize;
File file = File.createTempFile("test", ".dat");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
ByteOrder byteOrder = java.nio.ByteOrder.nativeOrder(); // "LITTLE_ENDIAN";
try {
long size = 8L * width * height;
for (long offset = 0; offset < size; offset += MAPPING_SIZE) {
long size2 = Math.min(size - offset, MAPPING_SIZE);
MappedByteBuffer buf = raf.getChannel().map(FileChannel.MapMode.READ_WRITE, offset, size2);
buf.order(byteOrder);
mappings.add(buf);
}
}