Linux内存管理
发表于|更新于|操作系统
|浏览量:
内存管理

文章作者: 褚成志
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 褚成志的分享站!
相关推荐
2026-04-09
内存知识总结
虚拟内存与多级页表对普通进程来说,能看到的其实是内核提供的虚拟内存,这些虚拟内存还需要通过页表,由系统映射为物理内存。 当进程通过 malloc() 申请虚拟内存后,系统并不会立即为其分配物理内存,而是在首次访 问时,才通过缺页异常陷入内核中分配内存。 内存缓存为了协调 CPU 与磁盘间的性能差异,Linux 还会使用 Cache 和 Buffer ,分别把文件和磁 盘读写的数据缓存到内存中。 内存回收一旦发现内存紧张,系统会通 过三种方式回收内存: 基于 LRU(Least Recently Used)算法,回收缓存; 基于 Swap 机制,回收不常访问的匿名页; 基于 OOM(Out of Memory)机制,杀掉占用大量内存的进程。 直接内存回收:缓存回收和 Swap 回收实际上都是基于 LRU 算法,也就是优先回收不常访 问的内存。LRU 回收算法,实际上维护着 active 和 inactive 两个双向链表,其中: active 记录活跃的内存页; inactive 记录非活跃的内存页。 越接近链表尾部,就表示内存页越不常访问。这样,在回收内存时,系统就...
2026-04-09
IO体系
节点流:直接和设别,特定地方读写 过滤流:(装饰器模式)节点流作为输入或者输出,使用一个存在的输入或者输出流来创建(作为参数传递进去) IO流的链:数据–》缓冲输出流–》文件输出流–》文件。装饰器模式的作用,获取一个 装饰器模式NIO–面向块或者缓冲区编程1.4出来的 NIO组件回顾 Java NIO,它不仅仅可以用在网络编程中,还能用在文件读写等其它场景 Channel–桥梁 java.nio.channels.Channel 实体之间的桥梁,实体可以是硬件设备,文件,网络套接字或者可执行IO操作的程序(Linux中一切皆文件) 不同实体(文件)类型对应不同的类型的Channel: FileChannel : 操作普通文件 DatagramChannel:UDP协议 SocketChannel:TCP协议,客户端和服务端之间的Channel ServerSocketChannel:TCP协议,用于服务端的Channel Buffer–数据容器线性有序序列(数组),存储特定的基本类型。Buffer的类型有CharBuffer,ByteBuffer, ShortBuf...
2026-04-09
Linux虚拟内存、buffer、cache、缓存命中率、缓存文件大小
cachetop 跟 top 类似,默认按照缓存的命中次数(HITS)排序,展示了每个进程的缓存命 中情况。具体到每一个指标,这里的 HITS、MISSES 和 DIRTIES ,跟 cachestat 里的含义 一样,分别代表间隔时间内的缓存命中次数、未命中次数以及新增到缓存中的脏页数。而 READ_HIT 和 WRITE_HIT ,分别表示读和写的缓存命中率。 指标–文件在内存中的缓存大小pcstat使用 pcstat 这个工具,来查看文件在内存中的缓存大小以及缓存比例。pcstat 是一个基于 Go 语言开发的工具,所以安装它之前,你首先应该安装 Go 语言 展示了 /bin/ls 这个文件的缓存情况:Cached 就是 /bin/ls 在缓存中的大小,而 Percent 则是缓存的百分比。你看 到它们都是 0,这说明 /bin/ls 并不在缓存中。 ls 命令,再运行相同的命令来查看的话,就会发现 /bin/ls 都在缓 存中了 实验新建文件–第一个终端 确认刚刚生成的文件不在缓存中。...
2026-04-09
操作系统内存管理思维导图总结
操作系统内存管理思维导图总结笔记在导图里面 https://www.processon.com/view/link/60a2668563768925076bb0cb 操作系统–虚拟内存管理
2026-04-09
Linux操作系统扫盲汇总
Linux操作系统扫盲汇总linux 基本概念概括 VFS 树链接:虚拟文件系统就是一个树,树的根部就是 / , 树上不同的节点,都会指向不同的物理地址(文件系统的目录树的不同节点其实是来自不同的分区),可以是具体的文件系统,或者网络节点,或者自己虚拟的节点。不同的dev就相当于是挂载到了树上的不同的节点,也就是一个文件夹 FD:文件描述符,指向INODE,进程打开文件的时候使用FD找到文件,同时FD是有数量限制的,默认是一个进程1024,可以使用<font style="color:#F5222D;">ulimit -SHn 65535</font> 临时修改,也可以修改文件 <font style="color:#F5222D;">/etc/security/limits.conf</font> 永久生效,在最后一行加入<font style="color:#F5222D;">- nofile 65535</font>参考 FD是进程而言的,IN...
2026-04-09
内存泄漏与SWAP
内存泄漏如何发生没正确回收分配后的内存,导致了泄漏。 访问的是已分配内存边界外的地址,导致程序异常退出 用户空间内存包括多个不同的内存段,比如只读 段、数据段、堆、栈以及文件映射段等。这些内存段正是应用程序使用内存的基本方式。 只读段、数据段、栈不会泄漏在程序中定义了一个局部变量,比如一个**整数数组 int data[64]** ,就定义了 一个可以**存储 64 个整数的内存段。由于这是一个局部变量,它会从内存空间的栈中分配内存。栈内存由系统自动分配和管理。一旦程序运行超出了这个局部变量的作用域,栈内存就会被 系统自动回收,所以不会产生内存泄漏的问题。** 只读段,包括程序的代码和常量,由于是只读的,不会再去分配新的内存,所以也不会产 生内存泄漏。 数据段,包括全局变量和静态变量,这些变量在定义时就已经确定了大小,所以也不会产 生内存泄漏。 堆和文件映射可能会泄漏事先并不知道数据大小,所以你就要用到标准库函数** malloc() ,在程序中动态分配内存。这时候,系统就会从内存空间的堆中分配内存。堆内存由应用程序自己来分配和管理。除非程序退出,这些堆内存并不会被系统自动释放,...
公告
👋 你好,我是褚成志,一名专注于云原生与后端架构的工程师。
热爱 Java、Kubernetes、Linux、Redis、Spring 等技术领域,持续探索 AGI 与智能化运维的边界。
这里记录我的技术思考与实践总结,欢迎交流!
热爱 Java、Kubernetes、Linux、Redis、Spring 等技术领域,持续探索 AGI 与智能化运维的边界。
这里记录我的技术思考与实践总结,欢迎交流!
