6

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 でテスト済み。

4

1 に答える 1

3

いいえ、心配する必要はありません。

http://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.htmlによると、動作は「基盤となるオペレーティング システム」の実装に依存しています。

「false の戻り値は、バッファの内容が物理メモリに常駐していないことを必ずしも意味しません。」

于 2013-02-27T16:01:32.210 に答える