admin管理员组

文章数量:1530029

前言

上一篇介绍完了虚拟内存,这篇将要给内存管理收个尾,介绍以下内存是如何回收的。

这里所要讲的内存回收,并不是虚拟内存中的页面置换(当可使用的物理空间不足时,需要把部分页换出),而是指对用户空间中的堆段和文件映射段进行回收(用户使用 malloc、mmap 等分配出去的空间),相当于操作系统层面的自动的 free()

内存泄露

Memory Leak,内存泄漏是指向系统申请分配内存,可是使用完了以后却不归还,结果系统也不能再次将它分配给需要的程序。

内存回收

内存回收指的是对用户空间中的堆段和文件映射段进行回收(用户使用 malloc、mmap 等分配出去的空间)。用户可以手动地使用 free() 等进行内存释放。当没有空闲的物理内存时,内核就会开始自动地进行回收内存工作。回收的方式主要是两种:后台内存回收和直接内存回收。

  • 后台内存回收(kswapd):在物理内存紧张的时候,会唤醒 kswapd 内核线程来回收内存,这个回收内存的过程异步的,不会阻塞进程的执行。
  • 直接内存回收(direct reclaim):如果后台异步回收跟不上进程内存申请的速度,就会开始直接回收,这个回收内存的过程是同步的,会阻塞进程的执行。

如果直接内存回收后,空闲的物理内存仍然无法满足此次物理内存的申请,那

本文标签: 内存管理内存