Hi everybody,         I found a problem confused me when I tested the mmap 
feature in lucene. I tested to read a file size of 800M by mmap method like 
below:
 
RandomAccessFile raf = new RandomAccessFile(new File(path), "r");
FileChannel rafc = raf.getChannel();ByteBuffer buff = 
rafc.map(FileChannel.MapMode.READ_ONLY, 0, rafc.size());
 int len=buff.limit(); byte[] b = new byte[len];   for (int i = 0; i < len; 
i++){         b[i] = buff.get();  }   
After the program finished, the linux cache will be consumed about 800M.
 

RandomAccessFile raf = new RandomAccessFile(new File(path), "r");
FileChannel rafc = raf.getChannel();ByteBuffer buff = 
rafc.map(FileChannel.MapMode.READ_ONLY, 0, rafc.size());
 int len=buff.limit(); for (int i = 0; i < len; i++){         Byte b= 
buff.get();  }   
But in this way, the linux cache will be consumed just 4M.
 

RandomAccessFile raf = new RandomAccessFile(new File(path), "r");
FileChannel rafc = raf.getChannel();ByteBuffer buff = 
rafc.map(FileChannel.MapMode.READ_ONLY, 0, rafc.size());
 int len=buff.limit(); byte[] b = new byte[len];   for (int i = 0; i < len; 
i++){         b[i] = buff.get();
         b[i]=0;  }   
In this way, the linux cache will  be also consumed 4M.
 
The whole content of the file should be read for above three tests, but for the 
last two testings, the linux system only cached 4M .
Would somebody give me the explaination about this? Thanks in advane.
 
Zhijiang Wang
 

Reply via email to