3、系统 I/O 与 Java NIO 缓冲区知识详解

系统 I/O 与 Java NIO 缓冲区知识详解

1. 系统级 I/O 概述

1.1 文件系统数据缓存

文件系统数据会像其他内存页面一样被缓存。后续的 I/O 请求中,部分或全部文件数据可能仍存在于物理内存中,可直接复用而无需从磁盘重读。多数文件系统还会预取额外的文件系统页面,假设进程会读取文件的其余部分。若内存竞争不激烈,这些页面在一段时间内仍有效,再次打开文件时可能无需访问磁盘。例如重复执行 grep 操作,第二次运行速度会更快。

写文件数据时,对文件的更改会产生脏页,随后会被换出以同步磁盘上的文件内容。创建文件时,会建立到空文件系统页面的映射,并在写入操作后刷新到磁盘。

1.2 内存映射文件

传统文件 I/O 中,用户进程通过 read() write() 系统调用传输数据,通常需要在内核空间的文件系统页面和用户空间的内存区域之间进行一次或多次数据复制。而多数操作系统支持的内存映射 I/O 可让用户进程充分利用系统 I/O 的面向页面特性,避免缓冲区复制。

内存映射 I/O 利用文件系统在用户空间和适用的文件系统页面之间建立虚拟内存映射,具有以下优点:
- 用户进程将文件数据视为内存,无需调用 read() write() 系统调用。
- 用户进程访问映射内存空间时,会自动生成页面错误以从磁盘加载文件数据。若修改映射内存空间,受影响的页面会被标记为脏页,并随后刷新到磁盘以更新文件。
- 操作系统的虚拟内存子系统会对页面进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值