MappedByteBuffer.isLoaded()が Windows で一貫して返されるように思えfalse
ます。たとえば BSD Unix でテストするとtrue
、同じテスト データが使用されます。
心配する必要がありますか?isLoaded()
基本的に、使用するデータのサイズに関係なく、Windows で true を返すことはできません。
参照用の私のテストコードは次のとおりです。
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");
}
}
}
これはヒントにすぎないことは理解していますが、ここで使用するような小さなサイズでは、ある時点で true を返すload()
と予想されます。isLoaded()
前述のように、これは Windows OS に関連しているようです。それは基本的にisLoaded()
はまったく役に立たないことを意味します。
おそらく、常に false を返す場合でも、私MappedByteBuffer
の Windows は完全に正常に動作し、優れたパフォーマンスを発揮することを追加する必要があります。isLoaded()
だから、ロードされていないと言うとき、私はそれを本当に信じていません。
Oracle Java 7 update 9 を使用して、Windows 7 でテスト済み。