Es scheint mir, dass MappedByteBuffer.isLoaded() unter Windows false
konsequent zurückgibt. Wenn ich auf BSD Unix teste, bekomme ich true
mit den gleichen Testdaten.Java MappedByteBuffer.isLoaded()
Sollte ich mir Sorgen machen? Ich kann isLoaded()
im Grunde nicht auf True unter Windows zurückgeben, egal welche Datengröße ich verwende.
Hier ist mein Test-Code als Referenz:
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");
}
}
}
Ich verstehe, dass load()
nur ein Hinweis ist, aber mit so kleinen Größen wie ich hier verwenden würde ich erwarten, isLoaded()
irgendwann wahr zurückzukehren. Wie gesagt, scheint dies mit Windows OS zu tun zu haben. Es bedeutet im Grunde, dass isLoaded()
ist absolut nutzlos.
Vielleicht sollte ich hinzufügen, dass meine MappedByteBuffer
unter Windows funktioniert absolut gut und mit stellaren Leistung, auch wenn isLoaded()
immer false zurückgibt. Ich glaube es nicht wirklich, wenn es sagt, dass es nicht geladen ist.
Getestet auf Windows 7, Oracle Java 7 Update 9.