javaNIO核心概念
在java的阻塞IO中使用InputStream和outputStream来进行输入和输出,那么两种流是相互独立使用的,而且每次数据传输都要通过“用户态数据”向“os内核态数据”copy或从“os内核态数据”向“用户态数据”copy;
而在javaNIO中我们的核心对象变为channel,select,buffer。那么数据交互的核心是channel和buffer,我们可以通过Stream获取channel也就相当于获取到文件与内存中的数据通道,那么在通道中可以通过buffer相互传递数据,这个特点是NIO特有的。
1:ByteBuffer中有3个核心概念:capacity,limit,position;
(1)capacity相当于整个ByteBuffer的容量,因为在初始化的时候ByteBuffer的容量就已经确定了并且是不可改变的,capacity指向ByteBuffer最后一个字节位置的下一个位置(容量是10,那么就指向10这个位置)。
(2)limit默认状态或者调用了ByteBuffer的clear方法后,都会与capacity相一致。
(3)position默认状态或者调用了ByteBuffer的clear方法后,会在ByteBuffer索引0的位置,position指针会出现在你将要读取的下一个字节那里。
(4)当调用ByteBuffer的flip方法后position指针回到0位置,limit指针从capacity处指向实际数据容量长度的索引位置(ByteBuffer长度10,实际数据长度5,那么limit指针指向索引5的位置)。
(5)ByteBuffer.allocateDirect(10)当使用这个方法创建ByteBuffer的时候,ByteBuffer会出现在heap以外的区域,这样不在jvm堆中的情况实现了 “0 copy”,不再需要将数据从用户态复制到os内核状态,在大量io操作时性能提升会很明显。
2:DirectByteBuffer相当于在heap以外的操作系统内存中直接分配内存,通过JNI调用c语言中的malloc,并且在DirectByteBuffer内部的address成员变量中保存了内存地址offset偏移量。
那么当进行垃圾回收的时候会自动标注DirectByteBuffer的address地址,通过JNI调用本地c语言的free方法
javaNIO核心概念的更多相关文章
- 领域驱动设计(DDD)部分核心概念的个人理解
领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...
- Javascript本质第一篇:核心概念
很多人在使用Javascript之前都至少使用过C++.C#或Java,面向对象的编程思想已经根深蒂固,恰好Javascript在语法上借鉴了Java,虽然方便了Javascript的入门,但要深入理 ...
- [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)
本系列导航 本系列其他文章目录请戳这里. 1.名字.约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有 ...
- spring技术核心概念纪要
一.背景 springframework 从最初的2.5版本发展至今,期间已经发生了非常多的修正及优化.许多新特性及模块的出现,使得整个框架体系显得越趋庞大,同时也带来了学习及理解上的困难. 本文阐述 ...
- ElasticSearch学习笔记-01 简介、安装、配置与核心概念
一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...
- Playmaker Input篇教程之引入的核心概念
Playmaker Input篇教程之引入的核心概念 Playmaker Input引入的核心概念 Playmaker引入了4个核心概念:状态机.动作.变量和事件.了解它们是学习操作Playmaker ...
- Maven的几个核心概念
POM (Project Object Model) 一个项目所有的配置都放置在 POM 文件中:定义项目的类型.名字,管理依赖关系,定制插件的行为等等.比如说,你可以配置 compiler 插件让它 ...
- 刀哥多线程GCD核心概念gcd
GCD GCD 核心概念 将任务添加到队列,并且指定执行任务的函数 任务使用 block 封装 任务的 block 没有参数也没有返回值 执行任务的函数 异步 dispatch_async 不用等待当 ...
- cocos2d-x一些核心概念截杀
Cocos2d-x中有很多概念,这些概念很多来源于动画.动漫和电影等行业,例如:导演.场景和层等概念,当然也有些有传统的游戏的概念.Cocos2d-x中核心概念:导演, 场景,层,节点,精灵,菜单动作 ...
随机推荐
- Build Post Office
Description Given a 2D grid, each cell is either an house 1 or empty 0 (the number zero, one), find ...
- Evaluation of fast-convergence algorithm for ICA-based blind source separation of real convolutive mixture
实际卷积混合情况下,基于ICA的盲源分离算法快速收敛性能评估[1]. 提出了一种新的盲源分离算法,该算法将独立分量分析ICA和波束形成BF相结合,通过优化算法来解决盲源分离的低收敛问题.该方法由以下三 ...
- webapp接口安全设计思路
在做webqq或者说app开发的时候,免不了会有接口是有权限的(如查询用户敏感信息等),这时接口安全设计思路就非常重要了. 简单一点,在APP中保存登录数据,每次调用接口时传输 程序员总能给自己找到偷 ...
- 第12组 Alpha冲刺(4/6)
Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 由于这两天在修bug,燃尽图没有下降 展示Git当日代码/文档签入记录(组内共享) 注: 由于Git ...
- mysql max()函数,min()函数,获取最大值以及最小值
mysql> select * from table1; +----------+------------+-----+---------------------+ | name_new | t ...
- C++ 类型转换符区别分析
转载自:https://blog.csdn.net/legalhighhigh/article/details/87459995 1.static_cast用于将参数转换为指定类型.需要注意的是,进行 ...
- (未完成)catalyst-system WriteUp(2019暑假CTF第一周reverse)
目录 预备学习--Linux实践:ELF文件格式分析 一.概述 二.分析ELF文件头(ELF header) 三.通过文件头找到section header table,理解其内容 四.通过secti ...
- SpringBoot框架 之 Thymeleaf
目录 Thymeleaf 添加启动器 创建模板文件夹 基本使用 综合使用 Thymeleaf 介绍 SpringBoot并不推荐使用jsp Thymeleaf 是一个跟 Velocity.FreeMa ...
- Spring Cloud Ribbon---微服务调用和客户端负载均衡
前面分析了Eureka的使用,作为服务注册中心,Eureka 分为 Server 端和 Client 端,Client 端作为服务的提供者,将自己注册到 Server 端,Client端高可用的方式是 ...
- Dolly
dolly - 必应词典 美['dɑli]英['dɒli] n.洋娃娃:(搬运重物的)台车 v.用独轮车运(物):用搅拌棒洗(衣):用捣棒捣碎(矿石) 网络多莉:多利:移动式摄影小车 变形复数:dol ...