Mi sembra che MappedByteBuffer.isLoaded() restituisca sempre false
su Windows. Quando provo a dire BSD Unix ottengo true
usando gli stessi dati di test.Java MappedByteBuffer.isLoaded()
Dovrei preoccuparmi? Fondamentalmente non riesco a ottenere isLoaded()
per restituire true su Windows indipendentemente dalla dimensione dei dati che utilizzo.
Ecco il mio codice di prova di riferimento:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MemMapTest {
private static final String FILENAME = "mydata.dat";
private static final int MB_1 = 1048576; // one Mbyte
private static final byte[] testData = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // len = 10 bytes
public static void main(String[] args) throws FileNotFoundException, IOException {
// Create a 10 Mb dummy file and fill it with dummy data
RandomAccessFile testFile = new RandomAccessFile(FILENAME, "rw");
for (int i = 0; i < MB_1; i++) {
testFile.write(testData);
}
MappedByteBuffer mapbuf = testFile.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, MB_1 * 20).load();
testFile.close();
if (mapbuf.isLoaded()) {
System.out.println("File is loaded in memory");
} else {
System.out.println("File is NOT loaded in memory");
}
}
}
Capisco che load()
è solo un accenno, ma con tali piccole dimensioni come io uso qui mi sarei aspettato isLoaded()
per tornare vero ad un certo punto. Come detto questo sembra essere correlato al sistema operativo Windows. Significa fondamentalmente che isLoaded()
è assolutamente inutile.
Forse dovrei aggiungere che il mio MappedByteBuffer
su Windows funziona perfettamente e con prestazioni stellari anche se isLoaded()
restituisce sempre false. Quindi non ci credo davvero quando dice che non è caricato.
testato su Windows 7, utilizzando Oracle Java 7 aggiornamento 9.