NIO堆外內存與零拷貝


重點:

  1、0拷貝需要系統支持。

 

普通內存模型:

  java線程內存 --> 操作系統內存 --> 硬盤

  

 

直接內存模型:

  java --> 操作系統內存 --> 硬盤

  

 

兩者對比,少了一步:直接內存直接操作系統內存,少了java線程內存到操作系統內存拷貝的這一步,所以提升了效率。 

 代碼:

  java.nio.channels.FileChannel#transferTo

示例:  

channel.transferTo(0,channel.size(),OutputChannel);

內存映射文件:

MappedByteBuffer:將文件映射到內核中(原有方式,必須在jvm中,才能操作),可以直接操作。具體的讀寫仍然由系統負責。

使用示例:
    File file = new File("hello.txt");
    //用隨機文件讀寫的方式打開文件
    RandomAccessFile randomAccessFile = new RandomAccessFile(file,"rw");
    //打開對應的通道
    FileChannel channel = randomAccessFile.getChannel();
    //將文件直接映射到程序,映射模式為讀寫
    MappedByteBuffer mappedByteBuffer = channel.map(MapMode.READ_WRITE,0,file.length());
    //接下來,就可以直接操作buffer了

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM