我们的服务在 Linux 申请的内存不会立刻从物理内存划分出来。系统数据修改时,才会发现物理内存没有分配,此时 CPU 会产生缺页中断,操作系统才会以 page 为单位把物理内存分配给程序。系统这么设计,主要是为了降低系统的内存碎片,并且减少内存的浪费。 不过系统分配的页很小,一般是 4KB,如果我们一次需要把 1G 的数据插入到内存中,写入数据到这块内存时就会频繁触发缺页中断,导致程序响应缓慢、服务状态不稳定的问题。 所以,当我们确认需要高并发读写内存时,都会先申请一大块内存并填 0,然后再使用,这样可以减少数据插入时产生的大量缺页中断。我额外补充一个注意事项,这种申请大内存并填 0 的操作很慢,尽量在服务启动时去做。
相关推荐
stevewongbuaa1 小时前
一些烦人的go设置 goland花心蝴蝶.5 小时前
Spring MVC 综合案例落霞的思绪5 小时前
Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)m0_748255655 小时前
环境安装与配置:全面了解 Go 语言的安装与设置SomeB1oody10 小时前
【Rust自学】14.6. 安装二进制crate患得患失94912 小时前
【Django DRF Apps】【文件上传】【断点上传】从零搭建一个普通文件上传,断点续传的App应用customer0812 小时前
【开源免费】基于SpringBoot+Vue.JS校园失物招领系统(JAVA毕业设计)中國移动丶移不动13 小时前
Java 反射与动态代理:实践中的应用与陷阱uzong15 小时前
Mybatis-plus 更新 Null 的策略踩坑记uzong15 小时前
mapStruct 使用踩坑指南