非直接缓冲区:通过allocate()方法分配缓冲区,将缓冲区建立在JVM的内存中。

直接缓冲区:通过allocateDirect()方法分配直接缓冲区,将缓冲区建立在物理内存中。可以提高效率。

字节缓冲区要么是直接的,要么是非直接的。如果为直接字节缓冲区,则 Java 虚拟机会尽最大努力直接在此缓冲区上执行本机 I/O 操作。也就是说,在每次调用基础操作系统的一个本机 I/O 操作之前(或之后),虚拟机都会尽量避免将缓冲区的内容复制到中间缓冲区中(或从中间缓冲区中复制内容)。

直接字节缓冲区可以通过调用此类的 allocateDirect() 工厂方法来创建。此方法返回的缓冲区进行分配和取消分配所需成本通常高于非直接缓冲区。直接缓冲区的内容可以驻留在常规的垃圾回收堆之外,因此,它们对应用程序的内存需求量造成的影响可能并不明显。所以,建议将直接缓冲区主要分配给那些易受基础系统的本机 I/O 操作影响的大、持久的缓冲区。一般情况下,最好仅在直接缓冲区能在程序性能方面带来明显好处时分配它们。

直接字节缓冲区还可以通过 FileChannel 的 map() 方法 将文件区域直接映射到内存中来创建。该方法返回MappedByteBuffer 。 Java 平台的实现有助于通过 JNI 从本机代码创建直接字节缓冲区。如果以上这些缓冲区中的某个缓冲区实例指的是不可访问的内存区域,则试图访问该区域不会更改该缓冲区的内容,并且将会在访问期间或稍后的某个时间导致抛出不确定的异常。
字节缓冲区是直接缓冲区还是非直接缓冲区可通过调用其 isDirect() 方法来确定。提供此方法是为了能够在性能关键型代码中执行显式缓冲区管理。

Java NIO之 直接缓冲区与非直接缓冲区相关推荐

  1. JAVA NIO知识点总结(2)——直接缓冲区和非直接缓冲区

    2019独角兽企业重金招聘Python工程师标准>>> 前面我们一直说NIO能够提高性能,那么到底如何提高效率.本篇就接着上一篇文章的缓冲区,来看看直接缓冲区和非直接缓冲区. 非直接 ...

  2. Java-NIO(三):直接缓冲区与非直接缓冲区

    直接缓冲区与非直接缓冲区的概念: 1)非直接缓冲区:通过 static ByteBuffer allocate(int capacity) 创建的缓冲区,在JVM中内存中创建,在每次调用基础操作系统的 ...

  3. Java NIO学习篇之直接缓冲区和非直接缓冲区

    定义 以上是书深入理解java虚拟机对直接内存的描述.直接缓冲区用的就是直接内存. java nio字节缓冲区要么是直接的,要么是非直接的.如果为直接字节缓冲区,则java虚拟机会尽最大努力直接在此缓 ...

  4. java 文件缓冲区_基于直接缓冲区和非直接缓冲区的javaIO文件操作

    基本概念: 1. 非直接缓冲区:  指的是通过jvm来缓存数据的,应用程序要读取本地数据要经历从本地磁盘到物理内存,然后copy到jvm中,然后再通过流的方式读取到应用程序中,写的操作正好与之相反. ...

  5. Java NIO ———— Buffer 缓冲区详解

    引言 缓冲区是一个用于特定基本类型的容器.由java.nio 包定义,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的 Buffer ,主要用于与NIO 通道进行交互.数据从通道存 ...

  6. Java NIO基础之缓冲区buffer(笔记 day01)

    学习笔记,仅供参考,禁止搬运,如有不正确的地方欢迎大家指正,谢谢!!! 一.缓冲区buffer  代码 package com.lihefei.nio.day01; import org.junit. ...

  7. Java NIO学习篇之缓冲区Buffer详解

    定义 缓冲区Buffer在java nio中负责数据的存储,缓冲区就是数组,用于存储不同类型数据的数组. jdk为java七大基本类型数据都准备了响应的缓冲区(boolean值除外): ByteBuf ...

  8. Java NIO三大核心之缓冲区Buffer概述

    三大核心原理示意图  说明: 每个 Channel 都会对应一个 Buffer: Selector 对应一个线程,一个线程对应多个 Channel(连接): 该图反应了有三个 Channel 注册到该 ...

  9. Java NIO之Channel(通道)

    **Java高级特性增强-NIO 本部分网络上有大量的资源可以参考,在这里做了部分整理并做了部分勘误,感谢前辈的付出,每节文章末尾有引用列表~ 写在所有文字的前面:作者在此特别推荐Google排名第一 ...

最新文章

  1. ASP.NET MVC 音乐商店 - 9. 注册和结账
  2. Nodejs与mysql连接池的应用(pool)
  3. gzip,bzip2压缩工具及tar打包工具
  4. java8电脑版安装包下载百度云_everything电脑文件搜索工具
  5. memcache学习之c客户端
  6. JavaScript 遗漏知识再整理;错误处理,类型转换以及获取当前时间、年份、月份、日期;...
  7. Ubuntu下gcc安装及使用
  8. 论文写作总结(软件工程专业相关)
  9. 基于Vivado的程序下载
  10. 【必看】AVAudioPlayer播放声音时加入了后台播放功能,看懂了吗?
  11. 6个usb口服务器无响应,USB接口不能用(没反应)修复方法
  12. linux服务器删除weblogic,linux weblogic安装和卸载
  13. kippo mysql_浅析开源蜜罐识别与全网测绘
  14. 我对计算机的看法英语作文,我对创新的看法英语作文7篇作文
  15. 如何高效学习 三天学完一本书
  16. Linux下设置MTU值到9000
  17. 用python画小猪佩奇的编码有注释_啥是佩奇?使用Python自动绘画小猪佩奇的代码实例...
  18. 为什么不建议你给领导回复“收到”?
  19. 一个让客户惊呼救急的BLDC电机驱动案例
  20. 基于DDD(领域驱动设计)的微服务设计实例

热门文章

  1. fastjson2 介绍及使用
  2. fastjson框架漏洞复现
  3. Reflections 详细介绍
  4. 真正的程序员 (转)
  5. Redis实现feed流
  6. 易趋携手科迈股份,助力项目管理体系落地
  7. iOS RTMP 视频直播开发笔记(4)- 关于 AVVideoProfileLevelKey
  8. 路由跟踪命令 tracert 命令详解
  9. 【总结】差分原理详解(通俗易懂)
  10. 不买房做什么都是不务正业