`

内存映射缓存区

 
阅读更多

原创转载请注明出处:http://agilestyle.iteye.com/blog/2360214

 

MappedByteBuffer

MappedByteBuffer是java nio引入的文件内存映射方案,读写性能极高。NIO最主要的就是实现了对异步操作的支持。其中一种通过把一个套接字通道(SocketChannel)注册到一个选择器(Selector)中,不时调用后者的选择(select)方法就能返回满足的选择键(SelectionKey),键中包含了SOCKET事件信息。这就是select模型。

 

SocketChannel的读写是通过一个类叫ByteBuffer(java.nio.ByteBuffer)来操作的.这个类本身的设计是不错的,比直接操作byte[]方便多了. ByteBuffer有两种模式:直接/间接.间接模式最典型(也只有这么一种)的就是HeapByteBuffer,即操作堆内存 (byte[]).但是内存毕竟有限,如果我要发送一个1G的文件怎么办?不可能真的去分配1G的内存;这时就必须使用"直接"模式,即 MappedByteBuffer 文件映射.

 

先中断一下,谈谈操作系统的内存管理.一般操作系统的内存分两部分:物理内存;虚拟内存.虚拟内存一般使用的是页面映像文件,即硬盘中的某个(某些)特殊的文件.操作系统负责页面文件内容的读写,这个过程叫"页面中断/切换". MappedByteBuffer也是类似的,你可以把整个文件(不管文件有多大)看成是一个ByteBuffer.MappedByteBuffer 只是一种特殊的 ByteBuffer ,即是ByteBuffer的子类。 MappedByteBuffer 将文件直接映射到内存(这里的内存指的是虚拟内存,并不是物理内存)。通常,可以映射整个文件,如果文件比较大的话可以分段进行映射,只要指定文件的那个部分就可以。

 

三种方式:

FileChannel提供了map方法来把文件影射为内存映像文件: MappedByteBuffer map(int mode,long position,long size); 可以把文件的从position开始的size大小的区域映射为内存映像文件,mode指出了 可访问该内存映像文件的方式:READ_ONLY,READ_WRITE,PRIVATE.

     

  • READ_ONLY,(只读): 试图修改得到的缓冲区将导致抛出 ReadOnlyBufferException.(MapMode.READ_ONLY)
  • READ_WRITE(读/写): 对得到的缓冲区的更改最终将传播到文件;该更改对映射到同一文件的其他程序不一定是可见的。 (MapMode.READ_WRITE)
  • PRIVATE(专用): 对得到的缓冲区的更改不会传播到文件,并且该更改对映射到同一文件的其他程序也不是可见的;相反,会创建缓冲区已修改部分的专用副本。 (MapMode.PRIVATE)

 

三个方法:

  • force()缓冲区是READ_WRITE模式下,此方法对缓冲区内容的修改强行写入文件
  • load()将缓冲区的内容载入内存,并返回该缓冲区的引用
  • isLoaded()如果缓冲区的内容在物理内存中,则返回真,否则返回假

 

三个特性:

调用信道的map()方法后,即可将文件的某一部分或全部映射到内存中,映射内存缓冲区是个直接缓冲区,继承自ByteBuffer,但相对于ByteBuffer,它有更多的优点:

  • 读取快
  • 写入快
  • 随时随地写入

 

Reference

http://blog.csdn.net/guoshaogang/article/details/7231318

http://www.myexception.cn/program/902559.html

 

 

  • 大小: 10.4 KB
  • 大小: 8.1 KB
分享到:
评论

相关推荐

    疯狂内核之——Linux虚拟内存

    1.8.1 永久内存映射 50 1.8.2 临时内核映射 55 第二章 内核级内存管理系统 58 2.1 Linux页面管理 58 2.1.1 NUMA架构 61 2.1.2 内存管理区 62 2.2 伙伴系统算法 65 2.2.1 数据结构 66 2.2.2 块分配 67 2.2.3 块释放 ...

    用于Linux的用户空间可映射dma缓冲设备驱动程序。_C_Makefile_下载

    u-dma-buf(用户空间可映射 DMA 缓冲区)\n概述\nu-dma-buf介绍\nu-dma-buf 是一个 Linux 设备驱动程序,它在内核空间中分配连续的内存块作为 DMA 缓冲区,并使它们在用户空间中可用。当用户应用程序使用 UIO(用户...

    操作系统(内存管理)

    (映射是一个表示一一对应关系的数学术语 —— 当内存的虚拟地址有一个对应的物理地址来存储内存内容时,该内存将被映射。) 基于 UNIX 的系统有两个可映射到附加内存中的基本系统调用: brk: brk() 是一个非常...

    千万字肝翻Linux内核源码,对底层原理深耕深分析,从入门到入狱

    内存屏障、内存映射、同步机制、GDB基本功能、CPU缓存、内核启动流程、 syncookie、读写分析、NFS实现框架、网络新特性、skb核心操作、HASH算法、过滤框架Nftables、接 收框架、页缓存PageCache、Netfilter框架、...

    udmabuf:适用于Linux的用户空间可映射dma缓冲区设备驱动程序

    u-dma-buf是Linux设备驱动程序,用于在内核空间中分配连续的内存块作为DMA缓冲区,并使它们在用户空间中可用。 当用户应用程序使用UIO(用户空间I / O)在用户空间中实现设备驱动程序时,打算将这些存储块用作DMA...

    Linux编程白皮书.rar

    2.5 内存映射 22 2.6 请求调页 23 2.7 Linux页缓存 24 2.8 页换出和淘汰 25 2.8.1 减少缓冲区和页缓存大小 25 2.8.2 换出System V共享内存页 26 2.8.3 换出和淘汰页 27 2.9 交换缓存 27 2.10 页换入 28 第3章 进程 ...

    Linux System and Performance Monitoring

    文件缓存区就是指,内核将 MPF 过程最小化,MnPF 过程最大化。随着系统不断的产生 I/O,buffer cache 也将不断的增加。直到内存不够,以及系统需要释放老的内存页去给其他用户进程使用时,系统就会丢弃这些内存页。 ...

    嵌入式系统/ARM技术中的基于IIS总线的嵌入式音频系统设计

    在音频驱动程序设计综合使用了DMA、分段多缓存区和内存映射技术以提高系统性能,满足音频实时性的要求。  关键词:音频设备驱动程序 IIS总线 嵌入式Linux DMA 内存映射 嵌入式音频系统广泛应用于GPS自动导航、...

    Understanding the Linux Kernel

     内存映射  直接I/O传送  异步I/O  第十七章回收页框  页框回收算法  反向映射  PFRA实现  交换  第十八章Ext2和Ext3文件系统  Ext2的一般特征  Ext2磁盘数据结构  Ext2的内存数据结构  创建Ext2文件...

    go-cache:Go的内存键:值存储缓存(类似于Memcached)库,适用于单机应用程序

    尽管不打算将go-cache用作持久数据存储区,但可以将整个缓存保存到文件并从文件中加载(使用c.Items()检索要映射的项目映射,并使用NewFrom()创建一个从反序列化的缓存中删除)以快速从停机中恢复。 (有关警告,请...

    构建高性能Web站点_PDF_45.5M

    10.1 数据库的前端缓存区 10.2 使用memcached 10.3 读操作缓存 10.4 写操作缓存 10.5 监控状态 10.6 缓存扩展 第11章 数据库性能优化 11.1 友好的状态报告 11.2 正确使用索引 11.3 锁定与等待 11.4 事务性...

    构建高性能Web站点(PDF)

    10.1 数据库的前端缓存区 10.2 使用memcached 10.3 读操作缓存 10.4 写操作缓存 10.5 监控状态 10.6 缓存扩展 第11章 数据库性能优化 11.1 友好的状态报告 11.2 正确使用索引 11.3 锁定与等待 11.4 事务...

    构建高性能Web站点(PDF)-第2部分

    10.1 数据库的前端缓存区 10.2 使用memcached 10.3 读操作缓存 10.4 写操作缓存 10.5 监控状态 10.6 缓存扩展 第11章 数据库性能优化 11.1 友好的状态报告 11.2 正确使用索引 11.3 锁定与等待 11.4 事务...

    嵌入式系统下Microwindows的实现

    ,这样当用户对显示设备进行写入、控制时可以避免对内存映射区进行操作,因此用户可以在不了 解底层图形硬件或没有使用过X Window的情况下进行图形程序的开发。这就是为什么现在在嵌入式 系统中广泛使用Microwindows...

    UNIX 高级教程系统技术内幕

    14.2 内存映射文件 14.2.1 mmap 及相关系统用 14.3 VM 设计原理 14.4 基本抽象概念 14.4.1 物理内存 14.4.2 地址空间 14.4.3 地址映射 14.4.4 匿名页面 14.4.5 硬件地址转换 14.5 段驱动程序 14.5.1 seg-vn 14.5.2 ...

    基于IIS总线的嵌入式音频系统设计

    绍了基于IIS总线的嵌入式音频设备的硬件体系结构及其Linux驱动程序的设计。在音频驱动程序设计综合使用了DMA、分段多缓存区和内存映射技术以提高系统性能,满足音频实时性的要求。

    linux 内核源代码分析

    9.3 高速缓存与内存的一致性 9.4 SMP结构中的中断机制 9.5 SMP结构中的进程调度 9.6 SMP系统的引导 第10章 系统引导和初始化 10.1 系统引导过程概述 10.2 系统初始化(第一阶段) 10.3 系统初始化(第二...

    Pintos-Project:斯坦福大学Pintos项目

    品托斯项目 来源 这是斯坦福大学操作系统课程的课程项目。 完成该过程需要花费大量时间和精力,但会使您受益更多。...内存映射文件 专案4 缓冲区缓存 可扩展文件 文件系统和子目录 贡献者 易倩和李冠成。

    深入分析Linux内核源码.chm

    第一章 走进linux 1.1 GNU与Linux的成长 1.2 Linux的开发模式和运作机制 ...2.4 Linux内存管理中Slab缓冲区 2.5 Linux中的VFS 2.6 Linux的连网 2.7 网络设备支持 2.8 模块支持 2.9 硬件接口 2.10 块设备 2.11 USB 设备

Global site tag (gtag.js) - Google Analytics