美文网首页
内存满了,会发生什么?

内存满了,会发生什么?

作者: 彳亍口巴 | 来源:发表于2022-11-14 23:02 被阅读0次

内存分配的过程

1、分配的内存实际上说虚拟地址,而不是物理地址,这个地址只是分配,还没有映射,需要用到的时候再进行映射
2、需要进行读写的时候,发现没有映射就会触发缺页中断,如果有空闲的物理内存,直接分配物理内存,没有的话就要进行内存回收
3、内存回收分为后台内存回收和直接内存回收,后台内存回收是在内存紧张时唤醒kswapd线程进行异步回收,不会阻塞进程的执行,这里的紧张指的是内存使用超过一定的阈值,这里应该尽早触发异步回收,让系统的内存保持足够
4、后台回收跟不上速度的话就要触发直接内存回收,这个回收的过程是同步的,会阻塞进程的执行。
5、如果直接内存都没达到要求的话,那就回触发OOM机制了

可以回收的内存

1、文件页:内核缓存的磁盘数据和内核缓存的文件数据,被改过的就是脏页,否则就是干净页,干净页可以直接释放掉,脏页需要写回到磁盘再释放,会有磁盘IO,效率较低
2、匿名页:比如堆栈数据等,有可能还要访问,所以不能直接释放内存,而是通过swap机制把不常访问的页先写到磁盘,然后释放掉内存,等后面用到的时候再加载到内存,这里判断不常使用的算法睡LRU算法,维护了两个链表,活跃链表和不活跃链表

相关文章

网友评论

      本文标题:内存满了,会发生什么?

      本文链接:https://www.haomeiwen.com/subject/cbjrxdtx.html