This question has been confusing me for days:
Assume that I have two processes (p_write and p_read) which run on the same machine.
- Process - p_writeis for writing/updating the mmap file.
- Process - p_readis for consuming the mmap file, or in other words, reading from the mmap file.
My assumption here is that p_write needs to first allocate a memory space (off-heap) for the mmap file (the space is mapped to the file automatically using the Java MappedByteBuffer API).
My question here is how does p_read read from the mmap file? My assumption now is that p_read also needs to allocate another same size off-heap space for the mmap file to be mapped to, but this seems incorrect as the amount of memory will need to be doubled in this scenario.
If p_read does not need to allocate a separate memory space for the mmap file to be mapped to, how does p_read know the right memory address that the file was mapped to by p_write?
UPDATE 1
I found a better question to ask, or you can consider this as a follow-up question:
If FileChannel.map() is called twice, will the same file be mapped twice into two different memory spaces?
// Scenario A: In single process
try (FileChannel fc = FileChannel.open(filePath, openOptions)) {
   // First call
   fc.map(MapMode.READ_ONLY, 0, SIZE_CONSTANT);
   // Second call
   fc.map(MapMode.READ_ONLY, 0, SIZE_CONSTANT);
}
And
// Scenario B: In two processes
// in first process
try (FileChannel fc = FileChannel.open(filePath, openOptions)) {
   // First call in first process
   fc.map(MapMode.READ_WRITE, 0, SIZE_CONSTANT);
}
...
// in second process
try (FileChannel fc = FileChannel.open(filePath, openOptions)) {
   // Second call in second process
   fc.map(MapMode.READ_ONLY, 0, SIZE_CONSTANT);
}
Maybe it does not really matter for the two scenarios, if they are all mapped into one same memory space?
