Java MappedByteBuffer.isLoaded()

Posted

技术标签:

【中文标题】Java MappedByteBuffer.isLoaded()【英文标题】: 【发布时间】:2013-02-27 12:43:30 【问题描述】:

在我看来,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");
        
    

我知道load() 只是一个提示,但我在这里使用的尺寸如此之小,我希望isLoaded() 在某个时候返回true。如前所述,这似乎与 Windows 操作系统有关。这基本上意味着isLoaded()绝对没有用。

也许我应该补充一点,即使isLoaded() 总是返回 false,我在 Windows 上的 MappedByteBuffer 工作得非常好并且具有出色的性能。所以当它说它没有加载时我真的不相信它。

在 Windows 7 上测试,使用 Oracle Java 7 更新 9。

【问题讨论】:

【参考方案1】:

不,你不应该担心。

根据http://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.html,该行为依赖于“底层操作系统”的实现。

“返回值为 false 并不一定意味着缓冲区的内容不驻留在物理内存中。”

【讨论】:

以上是关于Java MappedByteBuffer.isLoaded()的主要内容,如果未能解决你的问题,请参考以下文章

Java 布尔运算

java [Java] Java常用代码#java

Java - 35 Java 实例

Java While 循环

Java 字符串

Java If ... Else