> For the complete documentation index, see [llms.txt](https://okzkx.gitbook.io/blogs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://okzkx.gitbook.io/blogs/game-tech/computer/operating-system/memory/memory-recycle.md).

# memory-recycle\_冲突文件\_zkx\_20240828215908

主要有两类内存可以被回收

* **文件页**（File-backed Page）: **回收干净页的方式是直接释放内存，回收脏页的方式是先写回磁盘后再释放内存**。
* **匿名页**（Anonymous Page）: **通过 Linux 的 Swap 机制**，Swap 会把不常访问的内存先写到磁盘中，然后释放这些内存，给其他更需要的进程使用
* 文件页和匿名页的回收都是基于 LRU 算法，也就是优先回收不常访问的内存
  * 维护着 active 和 inactive 两个双向链表
  * 通常分别位于物理内存和虚拟内存

**在 4GB 物理内存的机器上，申请 8G 内存**

* 64 位可以申请多大的内存都没问题
* 使用的时候, 当页表没有对应的页时
* 会触发缺页中断, 置换不常用内存到虚拟内存
* 在 32 位操作系统，因为进程理论上最大能申请 3 GB 大小的虚拟内存，所以直接申请 8G 内存，会申请失败。
* 在 64位 位操作系统，因为进程理论上最大能申请 128 TB 大小的虚拟内存，即使物理内存只有 4GB，申请 8G 内存也是没问题，因为申请的内存是虚拟内存。如果这块虚拟内存被访问了，要看系统有没有 Swap 分区：
  * 如果没有 Swap 分区，因为物理空间不够，进程会被操作系统杀掉，原因是 OOM（内存溢出）；
  * 如果有 Swap 分区，即使物理内存只有 4GB，程序也能正常使用 8GB 的内存，进程可以正常运行；
