java使用mmap
java使用mmap
文件操作,可以通过mmap将文件映射到内存,提升写入性能
public class MmapMain {
private static final int FILE_SIZE = 1 << 22;
public static void main(String[] args) throws IOException {
long begin = System.currentTimeMillis();
random();
long end = System.currentTimeMillis();
System.out.println("random cost=" + (end - begin));
begin = System.currentTimeMillis();
stream();
end = System.currentTimeMillis();
System.out.println("stream cost=" + (end - begin));
begin = System.currentTimeMillis();
mmap();
end = System.currentTimeMillis();
System.out.println("mmap cost=" + (end - begin));
}
private static void random() throws IOException {
RandomAccessFile raf = new RandomAccessFile("random.txt", "rw");
byte[] bytes = new byte[1];
bytes[0] = (byte) 'a';
for (int i = 0; i < FILE_SIZE; i++) {
raf.write(bytes);
}
}
private static void stream() throws IOException {
byte[] bytes = new byte[1];
try (FileOutputStream outputStream = new FileOutputStream("stream.txt")) {
bytes[0] = (byte) 'a';
for (int i = 0; i < FILE_SIZE; i++) {
outputStream.write(bytes);
}
}
}
private static void mmap() throws IOException {
RandomAccessFile raf = new RandomAccessFile("mmap.txt", "rw");
MappedByteBuffer mbb = raf.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, FILE_SIZE);
byte bt = (byte) 'a';
for (int i = 0; i < FILE_SIZE; i++) {
mbb.put(bt);
}
}
}
执行日志如下
random cost=16955
stream cost=16085
mmap cost=18
可以看出,在4M文件顺序写入的情况下,mmap性能比其他模式高出好几个数量级
Last updated