我们的服务在 Linux 申请的内存不会立刻从物理内存划分出来。系统数据修改时,才会发现物理内存没有分配,此时 CPU 会产生缺页中断,操作系统才会以 page 为单位把物理内存分配给程序。系统这么设计,主要是为了降低系统的内存碎片,并且减少内存的浪费。 不过系统分配的页很小,一般是 4KB,如果我们一次需要把 1G 的数据插入到内存中,写入数据到这块内存时就会频繁触发缺页中断,导致程序响应缓慢、服务状态不稳定的问题。 所以,当我们确认需要高并发读写内存时,都会先申请一大块内存并填 0,然后再使用,这样可以减少数据插入时产生的大量缺页中断。我额外补充一个注意事项,这种申请大内存并填 0 的操作很慢,尽量在服务启动时去做。
相关推荐
追逐时光者13 分钟前
一款使用 C# 编写专为 Windows 11 打造的文件资源管理器增强工具!风象南41 分钟前
普通人用AI加持赚到的第一个100块冰_河2 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!JavaGuide5 小时前
7 道 RAG 基础概念知识点/面试题总结桦说编程5 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想格砸6 小时前
从入门到辞职|从ChatGPT到OpenClaw,跟上智能时代的进化蝎子莱莱爱打怪7 小时前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南哈密瓜的眉毛美7 小时前
零基础学Java|第三篇:DOS 命令、转义字符、注释与代码规范用户60572374873087 小时前
AI 编码助手的规范驱动开发 - OpenSpec 初探