2013-02-27 17 views
5

Wydaje mi się, że MappedByteBuffer.isLoaded() konsekwentnie zwraca false w systemie Windows. Kiedy testuję na BSD Unix, otrzymuję true używając tych samych danych testowych.Java MappedByteBuffer.isLoaded()

Czy powinienem się martwić? Zasadniczo nie mogę uzyskać wartości isLoaded(), aby zwracać wartość true w systemie Windows, niezależnie od używanych danych rozmiaru.

Oto mój kod testowy dla odniesienia:

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"); 
     } 
    } 
} 

Rozumiem, że load() jest tylko wskazówką, ale z tak małych rozmiarów jak używam tutaj spodziewałbym isLoaded() wrócić prawda w pewnym momencie. Jak powiedziałem, wydaje się, że jest to związane z systemem operacyjnym Windows. Zasadniczo oznacza to, że isLoaded() jest absolutnie nieużyteczne.

Być może powinienem dodać, że mój MappedByteBuffer w systemie Windows działa absolutnie dobrze iz gwiezdną wydajnością, nawet jeśli isLoaded() zawsze zwraca wartość false. Tak naprawdę nie wierzę, kiedy mówi, że nie jest załadowany.

Testowane na Windows 7, za pomocą Oracle Java 7 aktualizacji 9.

Odpowiedz