文件io
在linux中一些资源皆文件,每个文件都有对应的文件描述符(fd)
由于磁盘速度相对于cpu运算速度太慢,所以引入了内存对磁盘得文件进行缓存,程序读取数据流程如下:
1、直接内存获取
2、内存不存在时触发缺页异常,内核去磁盘读取并缓存在内存
由于文件被缓存在内存,所以当不同app访问同一文件时其实时访问的内存中的同一块数据,只是每个app都持有自己对文件独立的访问指针
由于读取数据需要从用户态切换到内核态,开销较大,不应当频繁触发,所以每次读取数据不仅仅只读取需要的数据,而是读取4k大小的数据页(通常所说的4k对齐)
脏页:数据被缓存到内存中经过程序修改导致数据与被刚加载进来的数据不一致,需要刷回磁盘的页
由于数据缓存在内存中,对数据的修改都是在内存中进行的,所以可能会存在数据丢失,需要根据不同的业务需求设定不同的刷盘策略:
1、定时刷
2、当内存使用率达到指定值
3、当脏页率达到指定值

1、堆内内存:
即数据存在jvm管理的内存上,当保存数据时需要jvm=>app堆->物理内存
2、堆外内存
数据在app堆上,保存数据时app堆->物理内存
3、mmap
与物理内存做映射,保存数据时直接保存在物理内存上
速度: mmap>堆外内存>堆内内存

浙公网安备 33010602011771号