1. 内存回收

内存紧张会导致:内存回收和OOM(out of memory)杀死进程

  • OOM:杀死占用大量进程的内存,释放这些内存,再分配给其他进程
  • 内存回收:也就是系统释放掉可以回收的内存

1.1 哪些内存可被回收

  1. 文件页(File-backed Page),缓存和缓存区的内存
    • 大部分文件页可以直接回收。但是那些被应用程序修改过,并且暂时还没有写入磁盘的数据(脏页),就得先写入磁盘,然后才能释放内存
    • 脏页写入磁盘的两种方式:
    • 在应用程序中,通过系统调用fsync,把脏页同步到磁盘
    • 可以交给系统,由内核线程pdflush负责刷新脏页
  2. 匿名页(Anonymous Page),应用程序动态分配的堆内存
    • 他们可能会被再次访问
    • swap机制将它们写入磁盘后再释放内存

2. Swap原理

  • swap就是一块磁盘空间或者一个本地文件,当成内存来使用。包括换出和换入两个过程: 换出:就是把进程暂时不用的内存数据存储到磁盘中,并释法这些数据占用的内存 换入:是进程再次访问这些内存的时候,把它们从磁盘读到内存中来

  • 我们常见的笔记本电脑的休眠和快速开机的功能,也基于Swap。休眠时,将系统内存写入磁盘;等到下次开机,再从磁盘加载到内存中