文档章节

Java NIO基本概念

克温s
 克温s
发布于 2015/12/12 19:00
字数 813
阅读 207
收藏 17
  1. I/O就是把数据移入/出缓冲区,用户(JVM,针对操作系统来说)进程执行IO操作的大约步骤如下:

    JVM进程向操作系统发出请求,让操作系统把缓冲区里的数据排干(写),或把数据填满缓冲区(读),进程使用这一机制处理所有数据进出操作。

  2. 缓冲区操作图

    用户空间是常规进程所在区域,JVM就是常规进程,驻守于用户空间,用户空间是非特权区域,在用户空间执行的代码不能访问硬件设备;

    内核空间是操作系统所在区域,内核代码的特别的权力,能与设备控制器通讯(DMA),控制着用户区域进程的运行状态,所有的IO都直接或间接通过内核空间。

    当进程请求IO的时候,它执行一个系统调用,将控制权移交给内核,C/C++调用的底层函数open(),read(),write(),close()就是建立或执行的系统调用,如果内核空间没有数据,则进程先挂起,内核要先把数据读进内存。

    磁盘基于块存储,Java I/O使用字符/字节流进行操作(切分块)。

  3. 虚拟内存 

    所有现代操作系统都使用虚拟内存。虚拟内存意为使用虚假(或虚拟)地址取代物理(硬件RAM)内存地址。

  4. 磁盘块大小512字节,操作系统把内存地址空间划分为页,即固定大小的字节数组,内存页的大小总是磁盘块大小化倍数,通常为2次幂,这样可以简化寻址操作,典型的内存页为1,024、2,048、4,096字节,虚拟和物理内存页的大小总是相同的。

  5. 操作系统分页技术

    内存页的大小为磁盘块的整数倍,这样内核就可直接向磁盘控制器发布命令,把内存页写入磁盘扇区,在需要的时候再装入。同时也叫内存页面调度或交换。所有的IO都是通过页面调度完成的,磁盘扇区与内存页都可以通过数组来访问。

  6. MMU内存管理单元

    CPU包含一个MMU,逻辑上位于CPU与物理内存之间,MMU负责映射虚拟内存与物理内存。

  7. 操作系统也有个页的概念,大小与基本内存页一致,或是基倍数,典型的操作系统页从2,048至8,192不等,且始终是基本内存页大小的倍数。

    操作系统页(整数倍<=) 虚拟内存页 物理内存页(^2 <=) 磁盘块(扇区)512Byte
  8. 文件I/O属于文件系统范畴,文件系统是更高层次的抽象,其操作磁盘;我们所写代码无法与磁盘打交道,所有都与文件系统交互。

  9. 文件预读

    大多数操作系统假设进程会继续读取文件剩余部分,因而会预读额外的文件系统页,如果内存争用情况不严重,这些文件系统页可能在相当长的时间内继续有效。


© 著作权归作者所有

共有 人打赏支持
克温s
粉丝 2
博文 52
码字总数 19221
作品 0
东城
项目经理
私信 提问
Java NIO AsynchronousFileChannel

原文链接 , 原文作者:Jakob Jenkov, 翻译:Neil Hao 在Java 7,AsynchronousFileChannel 被添加到了Java NIO中。使用AsynchronousFileChannel可以实现异步地读取和写入文件数据。 创建一个A...

Neil_Hao
2018/01/20
0
0
Java NIO系列教程(十六) Java NIO Files

原文地址 译者:章筱虎 java NIO Files类(java.nio.file.Files) 提供了操作文件的相关方法。本篇文章将会覆盖大多数常用的方法。Files类包含了很多方法,如果你需要的功能在文中没有提及,需...

章 筱虎
2018/01/23
0
0
分别使用Java IO、NIO、Netty实现的一个Echo Server示例

分别使用Java IO、Java NIO、Netty来实现一个简单的EchoServer(即原样返回客户端的输入信息)。 Java IO int port = 9000;ServerSocket ss = new ServerSocket(port);while (true) {final S...

zgw06629
2015/05/24
0
0
Java NIO原理 图文分析及代码实现

Java NIO原理图文分析及代码实现 前言: 最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术...

囚兔
2015/04/29
0
0
Java NIO原理图文分析及代码实现

前言: 最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。可以参考:http://baik...

SunnyWu
2014/11/05
0
1

没有更多内容

加载失败,请刷新页面

加载更多

rabbitmq安装教程

RabbitMQ有Windows与Linux版本的,这里先写Windows版本的安装。 以前安装软件总是在百度上找某某安装教程,结果能按照教程安装好的软件真的不多。想起先前以为大牛说的一句话,去官网按照官网...

em_aaron
今天
6
0
Android 贝塞尔曲线实践——波浪式运动

一、波浪效果如下 贝塞尔曲线自定义波浪效果的案例很多,同样方法也很简单,大多数和本案例一样使用二次贝塞尔曲线实现,同样还有一种是PathMeasure的方式,这里我们后续补充,先来看贝塞尔曲...

IamOkay
今天
3
0
Nmap之防火墙/IDS逃逸

选项 解释 -f 报文分段 --mtu 指定偏移大小 -D IP欺骗 -sI 原地址欺骗 --source-port 源端口欺骗 --data-length 指定发包长度 --randomize-hosts 目标主机随机排序 --spoof-mac Mac地址欺骗 ...

Frost729
今天
2
0
带你搭一个SpringBoot+SpringData JPA的环境

不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData JPA可以分分钟上手的。 其实我在学完SpringBoot和SpringData JPA了之...

java菜分享
今天
7
0
Chocolatey 在Window搭建一个开发环境

在看了(利用 Chocolatey 快速在 Windows 下搭建一个开发环境)后,准备从零开始 一、准备工作 1、用管理员权限启动:powershell,执行错误请参考(PowerShell因为在此系统中禁止执行脚本的解...

近在咫尺远在天涯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部