Linux内存回收:LRU算法

        linux操作系统再内存不足时会使用Swap机制,将一些不经常使用的匿名内存页放到磁盘当中,等下次需要时再读取到内存当中,而这个LRU算法就是用来选择把哪些不常使用的匿名内存页放到磁盘当中的。

LRU(Least Recently Used) :最近最少使用。其原理就是:当内存不足时,淘汰系统中最少使用的内存,这样对系统性能的损耗是最小的。

为了实现LRU算法,内核维护了两个双向链表:active_list  inactive_list。下面介绍下这两个链表的作用:

  • active_list活跃内存页链表。也就是说进程会经常访问这个链表中的内存页,所以进行内存淘汰时,不应该淘汰这个链表中的内存页。
  • inactive_list不活跃内存页链表。也就是说进程很少会访问这个链表中的内存页,所以进行内存淘汰时,淘汰这个链表中的内存页。

这链表中每个节点还有一个数值“PG_referenced”,这个数值再第二次机会法中使用,给这个内存页第二次机会。

被访问时各个情况分析:

1、当某个进程申请一个匿名内存页时:

        内核会将这个内存页添加到active_list链表中,并将PG_referenced标志设置为0。

2、当某个再active_list链表的内存页被访问时:

        会将此内存页的PG_referenced值变为1.

3、当某个再inactive_list链表且PG_referenced为0内存页被访问时:

        会将此内存页的PG_referenced值变为1.

4、当某个处于inactive_list链表中,且PG_referenced为1的内存页被访问时:

        会将此链表移动到活跃链表,并且将PG_referenced置为0.

内存淘汰时,只能从inactive_list中进行淘汰,淘汰过程如下:

  • 从inactive_list 的尾部开始进行内存淘汰,如果内存页的 PG_referenced 标志位为 1 时,将跳过此内存页,并且将此内存页的 PG_referenced 标志位设置为 0。
  • 如果内存页的PG_referenced标志位为 0 时,那么将此内存页写入到磁盘当中,并且将所有与此内存页的映射解除绑定,然后释放此内存页。
  • 再淘汰的过程中active_list链表中的内存页也要进行衰退,扫描active_list链表,当其PG_referenced值为1时将其置为0,当值为0时,要将其从active_list链表移到inactive_list链表中。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/196238.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【运维知识大神篇】超详细的ELFK日志分析教程5(Logstash中Filter常用插件详解+实战练习)

本篇文章主要讲解logstash的有关内容,包括filter的grok、date、user_agent、geoip、mutate插件,多个输入输出方案(多实例if多分支语句),每个知识点都涉及实战练习,在实战中学习,事半功倍&#x…

Mysql 高级日志binlog、undoLog、redoLog 详解

数据更新流程与日志记录: undoLog: binLog: redoLog:

Leetcode—160.相交链表【简单】

2023每日刷题(四十一) Leetcode—160.相交链表 算法思想 两个链表的节点之和是相等的 如果两个链表相交,那么相交点之后的长度是相同的 我们需要做的事情是,让两个链表从同距离末尾同等距离的位置开始遍历。这个位置只能是较短…

建筑红模板尺寸规格

红模板是建筑施工中常用的一种模板材料,具有较好的承重能力和稳定性。在建筑工程中,正确选择合适的红模板尺寸规格对于施工质量和效率至关重要。本文将介绍一些关于红模板尺寸规格的信息,帮助您更好地了解和选择适合的红模板。 以下是关于红模…

论如何让Spring Boot在高压力环境下依然与众不同

文章目录 🔊博主介绍🥤本文内容调优线程池优化线程池配置多样化设备支持分布式控制同步编程 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客…

FlowJo 10 v10.4(流式细胞分析软件)

FlowJo是一款广泛应用的流式细胞数据分析软件,它功能强大,简单易用,是流式领域最受推荐的一款专业分析软件,也是各高影响力科学期刊使用最多的软件,已经成了行业的一个标准。 FlowJo具有全面专业的分析功能&#xff0…

《数据结构、算法与应用C++语言描述》-线索二叉树的定义与C++实现

_23Threaded BinaryTree 可编译运行代码见:GIithub::Data-Structures-Algorithms-and-Applications/_24Threaded_BinaryTree 线索二叉树定义 在普通二叉树中,有很多nullptr指针被浪费了,可以将其利用起来。 首先我们要来看看这空指针有多少…

分享一套MES源码,可以直接拿来搞钱的好项目

目前国内智能制造如火如荼,工厂信息化、数字化是大趋势。如果找到一个工厂,搞定一个老板,搞软件的朋友就能吃几年。 中国制造业发达,工厂林立,但是普遍效率不高,需要信息化提高效率。但是矛盾的地方在于&a…

pdf文件能扫码查看吗?一键做文本二维码

pdf格式是常用的一种文件格式,很多资料、展示性的内容都会选择这种格式,现在很多人都需要将文件生成二维码图片后分享给他人,那么文件存入二维码展示的方法有哪些呢?下面给大家分享一招使用二维码生成器来生成二维码图片的操作方法…

skywalking告警UI界面有告警信息,webhook接口没有回调,400错误

400错误就是回调接口返回数据的属性对应不上 PostMapping(“/webhook”) public void webhook(RequestBody List alarmMessageList) 自定义的实体类AlarmMessage有问题 只能去官网找了 告警实体类官网 Getter EqualsAndHashCode RequiredArgsConstructor NoArgsConstructor(fo…

系列二十一、Spring中bean的创建顺序

一、概述 我们知道启动IOC容器时,Spring会为我们创建各种各样的bean,那么思考一个问题,bean的创建顺序是由什么决定的呢?答:bean的创建顺序是由BeanDefinition的注册信息决定的,这个其实很好理解&#xff0…

解析d3dcompiler_47.dll缺失怎么修复,4种方法修复d3dcompiler_47.dll文件

d3dcompiler_47.dll缺失怎么修复?其实在我们使用计算机操作的过程中,有时会遇到一些由dll文件错误导致的问题,其中d3dcompiler_47.dll丢失就是这样一种。那么究竟d3dcompiler_47.dll缺失是什么意思,为何它会发生丢失,以…

Unity WebGL通过URL的形式接收参数执行初始化

参考博客: http://t.csdnimg.cn/QnfhK 问题背景: 需要在外面的网页指定WebGL的打开初始化逻辑。 步骤: 1.配置jslib,用文本文件创建即可,"__Internal.jslib"。 2.加入一段代码: mergeInto(…

2023-简单点-机器学习中常用的特殊函数,激活函数[sigmoid tanh ]

机器学习中的特殊函数 Sigmoidsoftplus函数tanhReLu(x)Leaky-ReluELUSiLu/ SwishMish伽玛函数beta函数Ref Sigmoid 值域: 【0,1】 定义域:【负无穷,正无穷】 特殊点记忆: 经过 [0 , 0.5] 关键点[0,0.5]处的导数是 0.025 相关导数: softplu…

鹅厂终于开始收割韭菜了!!!获取手机号需要收费 ,吃相难看~

微信于2023年8月26日起对手机号验证能力收费,在规则生效时会给予每个小程序1000次免费验证,超出次数则需要到微信小程序官方后台进行充值,费用由微信官方收取。 这一做法,现在让越来越多的老板很头疼了, 如果你要修…

ArkUI开发进阶—@Builder函数@BuilderParam装饰器的妙用与场景应用【鸿蒙专栏-05】

ArkUI开发进阶—@Builder函数@BuilderParam装饰器的妙用与场景应用 HarmonyOS,作为一款全场景分布式操作系统,为了推动更广泛的应用开发,采用了一种先进而灵活的编程语言——ArkTS。ArkTS是在TypeScript(TS)的基础上发展而来,为HarmonyOS提供了丰富的应用开发工具,使开…

ELK高级搜索,深度详解ElasticStack技术栈-上篇

前言 1、黑马视频地址:java中级教程-ELK高级搜索,深度详解ElasticStack技术栈 2、本内容仅用于个人学习笔记,如有侵扰,联系删除 1. 课程简介 1.1 课程内容 ELK是包含但不限于Elasticsearch(简称es)、Lo…

嵌入式常见协议---IIC协议

1.IIC(IC)协议是什么? 全称 Inter-Integrated Circuit ,字面意思是集成电路之间,是IC BUS简称,中文应该叫集成电路总线,是一种串行通信总线(同步串行半双工),使用多主从…

配置 Mantis 在 Windows 上的步骤

配置 Mantis Bug Tracker 在 Windows 上的步骤 Mantis Bug Tracker 是一款开源的缺陷跟踪系统,用于管理软件开发中的问题和缺陷。在 Windows 环境下配置 Mantis 可以帮助开发者更方便地进行项目管理。以下是一个详细的教程,包含了 EasyPHP Devserver 和…

app上架一直显示审核中状态要怎么处理?

当你提交一个应用到App Store上时,它会经历一个审核过程。在这个过程中,苹果的审核人员会检查你的应用是否符合苹果的规定和标准。这个过程通常需要几天的时间,但是如果你的应用一直显示“审核中”状态,那么可能会有一些原因。 1…
最新文章